본문 바로가기

공부

My SQL - pymysql cursor 개념

728x90

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

 

Output

 <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 에 의해 제공된 행의 개수들을 나타낸다. 

OUTPUT

 

<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