티스토리 뷰

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 ,,,)

  - 많은 데이터를 처리 시 클라이언트에서 약간의 메모리 절약을 할 수 있다.


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함