티스토리 뷰
pymysql 커서 생성
import pymysql
from pymysql.cursors import DictCursor
def createCursor():
return pymysql.connect(
host='',
port=3306,
user='',
passwd='',
db='',
autocommit=True,
charset='utf8',
# cursorclass=DictCursor,
).cursor()
SQL 쿼리 호출
from pymysql.cursors import Cursor
cursor = createCursor()
assert isinstance(cursor, Cursor) # IDE에 객체 타입 명시
tval_i = 3
tval_s = 'test'
cursor.execute('select * from test where tf1 = %s and tf2 = %s', (tval_i, tval_s))
cursor.execute(SQL, ARGS)
ARGS 는 튜플로 SQL의 %s 에 들어갈 값을 넘김. 이때 인자의 타입에 따라 자동으로 쿼터 및 문자열 이스케이프가 적용됨.
* 커서 선언 시 autocommit 을 설정하지 않았다면 cursor.commit() 을 호출해야 INSERT, DELETE 와 같이 데이터에 변경 사항을 발생하는 쿼리가 데이터가 적용됨.
호출 결과 가져오기
affected_rows = cursor.execute(...) # affected_rows 의 경우 execute 시에 반환
rowcount = cursor.rowcount # 데이터를 가져오는 경우 전체 개수
cursor.fetchall() # 전체 데이터 가져오기 (list 안에 데이터)
cursor.fetchone() # 데이터 한개 가져오기 (연속해서 호출 시 차례대로 가져옴)
cursor.fetchmany(size=3) # 데이터 갯수 설정해 가져오기 (list 안에 데이터)
current_row = cur.rownumber # fetchone, many 로 스트리밍 시, 현재 읽을 데이터 번호
* 커서 선언 시 cursurclass=DictCursor 를 사용할 경우 - dictonary 가 반환됨. ex> {FIELD_NAME : VAL ...}
- 필드 이름과 데이터를 함께 가져오고 싶을 때 사용한다.
사용하지 않을 경우 - 튜플 형태로 필드 이름은 생략하여 값만 반환됨. ex> (VAL1, VAL2 ,,,)
- 많은 데이터를 처리 시 클라이언트에서 약간의 메모리 절약을 할 수 있다.
댓글