Cursor 클래스는 실제적으로 DB의 sql 구문을 실행시키고 조회된 결과를 가져오게 된다.
<1> pymysql default - tuple 반환
(예제1)
import pymysql
con = pymysql.connect('localhost', 'user'. 'psswd', 'testdb')
with con.cursor() as cur:
cur.execute('SELECT VERSION()')
version = cur.fetchone()
print(f'Database version: {version[0]}')
cur.close()
1. execute() - sql statement 를 실행시키기 위해 execute 함수 호출
2. fetchone() - 조회된 결과로부터 데이터 1개(하나의 row)를 반환
3. fetchall() - 모든데이터를 한꺼번에 클라이언트로 가져올 때 사용이 된다.
4. fetchmany() - 여러개의 데이터를 반환하게 된다.
<2> pymysql dictionary cursor - data 가 python dictionaries 형태로 반환된다.
(예제2)
import pymysql
import pymysql.cursors
con = pymysql.connect(host='localhost', user='user7', password='s$cret', db='testdb', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor)
try:
with con.cursor() as cur:
cur.execute('SELECT * FROM cities')
rows = cur.fetchall()
for row in rows:
print(row['id'], row['name'])
finally:
con.close()
<3> column header - column 이름 출력하기
(예제3)
import pymysql
con = pymysql.connect('localhost', 'user7', 's$cret', 'testdb')
try:
with con.cursor() as cur:
cur.execute('SELECT * FROM cities')
rows = cur.fetchall()
desc = cur.description
print(f'{desc[0][0]:<8} {desc[1][0]:<15} {desc[2][0]:>10}')
for row in rows:
print(f'{row[0]:<8} {row[1]:<15} {row[2]:>10}')
finally: con.close()
<4> pymysql의 prepared statements
(예제4)
import pymysql
con = pymysql.connect('localhost', 'user7', 's$cret', 'testdb')
# user input
myid = 4
try:
with con.cursor() as cur:
cur.execute('SELECT * FROM cities WHERE id=%s', myid)
cid, name, population = cur.fetchone()
print(cid, name, population)
finally:
con.close()
- prepared statement는 보안과 성능을 향상 시킨다.
- 문장에 값을 직접 쓴느 대신 %s 를 쓰게 된다.
<5>rowcount
(예제5)
with con.cursor() as cur:
cur.execute('SELECT * FROM cities WHERE id IN (1, 2, 3)')
print(f'The query affected {cur.rowcount} rows')
- SELECT,UPDATE,INSERT 에 의해 제공된 행의 개수들을 나타낸다.
<6> Insert row
(예제6)
city = (9, 'Kiev', 2887000)
cur.execute('INSERT INTO cities VALUES(%s, %s, %s)', (city[0], city[1], city[2])) con.commit()
'공부' 카테고리의 다른 글
ORM 이란? (0) | 2020.10.21 |
---|---|
백앤드 개발자 로드맵 (0) | 2020.10.18 |
웹서버 - Reverse Proxy란 (0) | 2020.09.11 |
Elastic stack 구성 (0) | 2020.09.11 |
Github 사용법에 대해서 (0) | 2020.09.06 |