Python

[Python] 페이징 처리하기

수노 SUNHO 2017. 10. 24. 15:14

이 내용을 어느 카테고리에 넣을지 고민하다가. 사용한 언어 카테고리에 넣는게 좋을 것 같아 여기다가 작성한다.


python과 pymysql(MySQL)을 사용하여 페이징 처리를 해봤다.



일단, 간단히.

pymysql을 사용하여 DB에 연결하는 방법

def connect_db():
try:
conn = pymysql.connect(
host='',
user='',
password='',
db='',
charset='utf8',
cursorclass=pymysql.cursors.DictCursor
)
return conn
except:
print("DB connection Error")

conn = connect_db()
curs = conn.cursor()


페이징하는 첫번째 방법

per_page = 100 # 한 페이지당 개수

#: 전체 페이지 구하기
total_cnt = 775772 # 전체 개수
# 전체가 775772개라고 임의로 정해둔 것 뿐,
# 이 부분은 "SELECT count(*) FROM table_name"을 통해 구해도 좋다.
total_page = round(total_cnt / per_page)

for page in range(total_page):
query = "SELECT id, kor_sentence FROM sentences LIMIT %s OFFSET %s;"
curs.execute(query, (per_page, page * per_page))
# 파이썬이 아닌 다른 언어에서는 page가 1부터 시작해서 (page-1) 해줘야 하지만,       파이썬의 range()는 0부터 시작하기 때문에 따로 -1 처리를 하지 않았다.
# 직접 실행해보면 알겠지만, MySQL의 OFFSET은 0부터 시작이다.

rows = curs.fetchall()

### input your code ###

입력된 페이지를 출력하려면 for문을 쓸 필요 없을 것이다. 대신 존재하는 페이지인지 확인해야 한다.

페이징하는 두번째 방법

curs.execute("SELECT id, kor_sentence FROM sentences")
rows = curs.fetchmany(size=100)

while rows:

### input your code ###

rows = curs.fetchmany(size=100)
python이 좋은 점 추가요~
fetchmany()과 while문을 사용하면 간단히 처음부터 마지막 데이터를 순차적으로 다 꺼낼 수 있다.