ここで、カーソルを前に戻すというメソッドなどは存在しないのでしょうか。
はい、PythonのSQLiteはCursor#scrollを実装していないので、存在しません。
pysqliteのcursor.c
fetchone/fetchmany/fetchallがlistを返すので、fetch関数を使う手もあります。
以下はサンプルコードです。
Python
1# -*- coding: utf8 -*-
2import sqlite3
3from contextlib import closing
4
5tablename = 'sample'
6
7
8def insert_data(cur: sqlite3.Cursor) -> None:
9 import random
10 random.seed(42)
11 row_count = 0
12 for i in range(10):
13 sql = f"insert into {tablename} values (?, ?)"
14 params = (i, random.randint(0, 500))
15 cur.execute(sql, params)
16 row_count += cur.rowcount
17
18 print(f"rowcount:{row_count}")
19
20
21def select_data(cur: sqlite3.Cursor) -> None:
22 sql = f"SELECT * FROM {tablename} ORDER BY id"
23
24 cur.execute(sql)
25 rows = cur.fetchall()
26 for row in rows:
27 print(row)
28 print("#" * 40)
29 for row in rows:
30 print(row)
31
32
33def main() -> None:
34 db_name = 'sample.db'
35 with closing(sqlite3.connect(db_name)) as conn:
36 conn.set_trace_callback(print)
37 cur = conn.cursor()
38 cur.execute(f"drop table if exists {tablename}")
39 cur.execute(f"create table {tablename} (id, rnd)")
40 insert_data(cur)
41 select_data(cur)
42 # コミット忘れに注意!
43 conn.commit()
44
45
46if __name__ == '__main__':
47 main()
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/03/24 04:23
2018/03/24 04:32 編集