やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

列名でアクセスする(sqlite3.Row)

 外部ライブラリを使わなくてもできる。

成果物

情報源

コード

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とか何とかいうやつしかなくて苦労したが。今はもっと楽できそう。

対象環境

$ uname -a
Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux