外部ライブラリを使わなくてもできる。
成果物
情報源
コード
import sqlite3 con = sqlite3.connect(":memory:") con.row_factory = sqlite3.Row cur = con.cursor() cur.execute('create table T(i integer, r real, t text, b blob);') sql = 'insert into T values(?, ?, ?, ?)' datas = [(0, 0.1, 'A', 'A'.encode('utf-8')),(1, 1.1, 'B', 'B'.encode('utf-8')),] cur.executemany(sql, datas) rows = cur.execute("select rowid,* from T;") for i,row in enumerate(rows): print(str(i) + '----------------') print('rowid: {}'.format(row['rowid'])) print('i: {}'.format(row['i'])) print('r: {}'.format(row['r'])) print('t: {}'.format(row['t'])) print('b: {}'.format(row['b']))
0---------------- rowid: 1 i: 0 r: 0.1 t: A b: b'A' 1---------------- rowid: 2 i: 1 r: 1.1 t: B b: b'B'
ポイントはcon.row_factory = sqlite3.Row
。こうすることでrows = cur.execute("select ...")
となりrows[行位置][列名]
でアクセスできる。
所感
ORMを使うならPeewee
とかがあるらしい。以前はSQLAlchemyとか何とかいうやつしかなくて苦労したが。今はもっと楽できそう。
対象環境
- Raspbierry pi 3 Model B+
- Raspbian stretch 9.0 2018-11-13 ※
- bash 4.4.12(1)-release ※
- SQLite 3.29.0 ※
- MeCab 0.996ユーザ辞書
- Python 3.5.3
- SQLite 3.16.2
$ uname -a Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux