sql文のLIMIT、OFFSET句とリスト内包表記のメモ
表データをN行ずつ分けて処理する。
#!/usr/bin/env python # -*- coding: utf-8 -*- import sqlite3 ↓↓↓↓↓↓ここから <test用DBの準備>↓↓↓↓↓↓ con = sqlite3.connect(":memory:") cur = con.cursor() sql = """CREATE TABLE IF NOT EXISTS user ([user_id] TEXT, [user_name] TEXT );""" cur.execute(sql) sql = "delete from user" cur.execute(sql) #test用データ tplist = ((1,'taro'),(2,'hanako'),(3,'becky'),(4,'alice'),(5,'ken'),(6,'jiro'),(7,'kaori')) print tplist ph = "?," * (len(tplist[0]) - 1) + "?" for t in tplist: sql = "INSERT INTO %s VALUES(%s)" % ('user',ph) con.execute(sql,t) con.commit() #↑↑↑↑↑↑ここまで <test用DBの準備>↑↑↑↑↑↑ limit = 2 """ sql文でLIMIT句OFFSET句を使う """ sql = "select count(user_name) from user" cur.execute(sql) rowcount = cur.fetchone()[0] for offset in range(int(rowcount)/limit+1): sql = "select * from user order by user_id LIMIT %d OFFSET %d" % \ (limit,limit*offset) cur.execute(sql) print cur.fetchall() """ リスト内包表記でスライス """ sql = "select * from user" cur.execute(sql) tplist = cur.fetchall() for row in [tplist[limit*offset:limit*(offset+1)] for offset in range(len(tplist)/limit+1)]: print row cur.close() con.close()