import pymysql
import pandas as pd
class Database():
def __init__(self, _host, _user, _pass):
self._db = pymysql.connect(
host = _host,
user = _user,
password = _pass,
database= 'database',
port = 3306
)
self.cursor = self._db.cursor(pymysql.cursors.DictCursor)
## select 쿼리문을 실행하는 경우 사용하는 함수
def excuteAll(self, _sql, _values=[], _limit=0):
self.cursor.execute(_sql,_values)
self.result = self.cursor.fetchall()
if _limit !=0:
self.df = pd.DataFrame(self.result).head(_limit)
else:
self.df = pd.DataFrame(self.result)
return self.df
## select문을 제외한 데이터베이스의 내용을 삽입, 수정, 삭제하는 경우
def execute(self, _sql, _values=[]):
self.cursor.execute(_sql,_values)
self.result = self.cursor.fetchall()
return self.result
def commit (self):
self._db.commit()
return ' commit complete'
## 모든 작업을 끝낸 후 데이터베이스와의 접속을 종료
def close (self):
self._db.close()
return 'Database close'
모듈을 통하여 SQL 실행
import mod_sql as ms
import pandas as pd
sql_class = ms.Database("172.16.12.149",'database','1234')
sql_1 = """
select *
from `emp`
"""
emp = sql_class.excuteAll(sql_1)
sql_2 = """
select *
from `dept`
"""
dept = sql_class.excuteAll(sql_2)
emp_copy = emp
sql = """
select EMPNO,ENAME,JOB,
CASE
when JOB ='SALESMAN'
then 1
when JOB = 'MANAGER'
then 2
else 3
END as job_code
from EMP
"""
sql_class.excuteAll(sql)
#case1
sql = """
select *
from emp
where SAL >=2000 and SAL<5000
"""
sql_class.excuteAll(sql)
#case2
sql = """
select *
from emp
where SAL between 2000 and 4999
"""
sql_class.excuteAll(sql)
## sql 쿼리문
sql = """
select JOB,
replace(JOB, 'SALESMAN','SALES') as JOB_
from emp
"""
sql_class.excuteAll(sql)
## sql 쿼리문
sql = """
select concat(ENAME,'(',JOB,')') as ENAME_
from emp
"""
sql_class.excuteAll(sql)
### sql 쿼리문
#case1
sql = """
select SAL,
if(SAL >=2000,"HIGH","LOW") as `H/L`
from emp
"""
sql_class.excuteAll(sql)
#case2
sql_2 = """
select SAL,
case
when SAL >=2000 then 'HIGH'
else 'Low'
end as `H/L`
from emp
"""
sql_class.excuteAll(sql_2)
sql = """
select *
from emp
left join dept
on emp.DEPTNO = dept.DEPTNO
"""
sql_class.excuteAll(sql)
### emp table에서 s 시작하는 사원의 정보 출력
### python 에서 %를 쓰기위해서 두개를 사용해야 한다.
sql = """
select *
from emp
where `ENAME` like 'S%%'
"""
db.excuteAll(sql)
## S로 끝나는 사람
sql_2 = """
select *
from emp
where `ENAME` like '%%S'
"""
db.excuteAll(sql_2)
## 앞에있던 뒤에있던 가운데에 S가 있으면
sql_3 = """
select *
from emp
where `ENAME` like '%%S%%'
"""
db.excuteAll(sql_3)