본문 바로가기

Data_Analysis_Track_33/Python_문제풀이

Python_08_문제풀이(pymysql TODO 문제)

TODO
hr database의 emp 테이블의 데이터를 다루는 함수들을 구현

 

1. 직원 정보들(emp의 컬럼들)을 매개변수로 받아 insert 하는 함수

2. 수정할 직원 정보들을 매개변수로 받아 받은 emp_id의 직원의 나머지 컬럼값들을 수정하는 함수

3. emp_id를 매개변수로 받아 그 직원을 삭제하는 함수

4. job을 매개변수로 받아 그 업무를 하는 직원들을 삭제하는 함수

5. 전체 직원정보를 모두 조회해서 반환하는 함수

6. emp_id를 매개변수로 받아 그 직원 정보를 조회해서 반환하는 함수

7. dept_name을 매개변수로 받아서 그 부서에 소속된 직원들의 정보를 조회해서 반환하는 함수

8. salary 범위를 매개변수로 받아 그 범위의 salary를 받는 직원들의 정보를 조회해서 반환하는 함수

9. emp_id를 매개변수로 받아서 그 직원의 커미션이 얼마인지를(salary * comm_pct) 조회해 반환하는 함수

10. dept_name을 매개변수로 받아서 부서별 급여 통계정보(합계, 최대, 최소, 평균, 표준편차)를 반환하는 함수

 

import pymysql
from datetime import date, datetime

# 1. 직원 정보들(emp의 컬럼들)을 매개변수로 받아 insert 하는 함수
def insert_emp(emp_id, emp_name, job, mgr_id, hire_date, salary, comm_pct, dept_name):
    sql = "insert into emp (emp_id, emp_name, job, mgr_id, hire_date, salary, comm_pct, dept_name) \
            values (%s, %s, %s, %s, %s, %s, %s, %s)"

    with pymysql.connect(host = 'localhost', port = 3306, user = 'playdata', password = '1111', db = 'hr') as conn:
            with conn.cursor() as cursor:
                cnt = cursor.execute(sql, (emp_id, emp_name, job, mgr_id, hire_date, salary, comm_pct, dept_name))
                conn.commit()
                return cnt
            
# 2. 수정할 직원 정보들을 매개변수로 받아 받은 emp_id의 직원의 나머지 컬럼값들을 수정하는 함수            
def update_emp(emp_id, emp_name, job, mgr_id, hire_date, salary, comm_pct, dept_name):
    sql = "update emp set emp_name = %s, job = %s, mgr_id = %s, hire_date = %s, salary = %s, comm_pct = %s, dept_name = %s where emp_id = %s"
    
    with pymysql.connect(host = 'localhost', port = 3306, user = 'playdata', password = '1111', db = 'hr') as conn:
            with conn.cursor() as cursor:
                cnt = cursor.execute(sql, (emp_name, job, mgr_id, hire_date, salary, comm_pct, dept_name, emp_id))
                conn.commit()
                return cnt 

# 3. emp_id를 매개변수로 받아 그 직원을 삭제하는 함수 
def delete_emp(emp_id):
    sql = "delete from emp where emp_id = %s"
    
    with pymysql.connect(host = 'localhost', port = 3306, user = 'playdata', password = '1111', db = 'hr') as conn:
            with conn.cursor() as cursor:
                cnt = cursor.execute(sql, (emp_id))
                conn.commit()
                return cnt 

# 4. job을 매개변수로 받아 그 업무를 하는 직원들을 삭제하는 함수            
def delete_emp_job(job):
    sql = "delete from emp where job = %s"
    
    with pymysql.connect(host = 'localhost', port = 3306, user = 'playdata', password = '1111', db = 'hr') as conn:
            with conn.cursor() as cursor:
                cnt = cursor.execute(sql, (job))
                conn.commit()
                return cnt  

# 5. 전체 직원정보를 모두 조회해서 반환하는 함수            
def select_all_emp():
    sql = "select * from emp"
    
    with pymysql.connect(host = 'localhost', port = 3306, user = 'playdata', password = '1111', db = 'hr') as conn:
            with conn.cursor() as cursor:
                cnt = cursor.execute(sql)
                return cursor.fetchall()

# 6. emp_id를 매개변수로 받아 그 직원 정보를 조회해서 반환하는 함수            
def select_emp_id(emp_id):
    sql = "select * from emp where emp_id = %s"

    with pymysql.connect(host = 'localhost', port = 3306, user = 'playdata', password = '1111', db = 'hr') as conn:
            with conn.cursor() as cursor:
                cnt = cursor.execute(sql, emp_id)
                return cursor.fetchone()
            
# 7. dept_name을 매개변수로 받아서 그 부서에 소속된 직원들의 정보를 조회해서 반환하는 함수
def select_emp_dept_name(dept_name):
    sql = "select * from emp where dept_name = %s"
    
    with pymysql.connect(host = 'localhost', port = 3306, user = 'playdata', password = '1111', db = 'hr') as conn:
            with conn.cursor() as cursor:
                cursor.execute(sql, dept_name)
                return cursor.fetchall()


# 8. salary 범위를 매개변수로 받아 그 범위의 salary를 받는 직원들의 정보를 조회해서 반환하는 함수
def select_emp_salary(start_salary, end_salary):
    sql = "select * from emp where salary between %s and %s"
    
    with pymysql.connect(host = 'localhost', port = 3306, user = 'playdata', password = '1111', db = 'hr') as conn:
            with conn.cursor() as cursor:
                cnt = cursor.execute(sql, (start_salary, end_salary))
                return cursor.fetchall()    
            
# 9. emp_id를 매개변수로 받아서 그 직원의 커미션이 얼마인지를(salary * comm_pct) 조회해 반환하는 함수
def select_comm_pct(emp_id):
    sql = "select emp_name, salary * comm_pct from emp where emp_id = %s"
    
    with pymysql.connect(host = 'localhost', port = 3306, user = 'playdata', password = '1111', db = 'hr') as conn:
            with conn.cursor() as cursor:
                cnt = cursor.execute(sql, emp_id)
                return cursor.fetchone()    
            
# 10. dept_name을 매개변수로 받아서 부서별 급여 통계정보(합계, 최대, 최소, 평균, 표준편차)를 반환하는 함수
def select_info(dept_name):
    sql = "select sum(salary), max(salary), min(salary), avg(salary), stddev(salary) from emp where dept_name = %s"
    
    with pymysql.connect(host = 'localhost', port = 3306, user = 'playdata', password = '1111', db = 'hr') as conn:
            with conn.cursor() as cursor:
                cnt = cursor.execute(sql, dept_name)
                return cursor.fetchall()

결과확인

1번

insert_emp(207, 'lee', 'PR_REP', 101, '2002-05-03', 10000, 0.1, 'Accounting') # 1번 확인
# MySQL Workbench에서 결과값 확인

2번

update_emp(207, 'lee', 'PR_REP', 102, '2002-05-03', 8000, 0.1, 'Accounting') # 2번 확인

3번

delete_emp(207) # 3번 확인

4번

insert_emp(207, 'lee', 'abcde', 101, '2002-05-03', 10000, 0.1, 'Accounting') # 값 다시 생성

 

delete_emp_job('abcde') # 4번 확인

5번

select_all_emp() # 5번 확인

6번

select_emp_id(206) # 6번 확인

7번

select_emp_dept_name('Sales') # 7번 확인

8번

select_emp_salary(5000, 10000) # 8번 확인

9번

select_comm_pct(160) # 9번 확인

10번

select_info('Sales') # 10번 확인