SQLite は、別にサーバプロセスは必要とせずデータベースのアクセスに SQL 問い合わせ言語の非標準的な一種を使える軽量なディスク上のデータベースを 提供する C ライブラリです。ある種のアプリケーションは内部データ保存 に SQLite を使えます。また、SQLite を使ってアプリケーションのプロトタイ プを作りその後そのコードを PostgreSQL や Oracle のような大規模データベー スに移植するということも可能です。
pysqlite は Gerhard Häring によって書かれ、PEP 249 に記述され た DB-API 2.0 仕様に準拠したSQL インタフェースを提供するものです。
このモジュールを使うには、最初にデータベースを表す Connection オブジェクトを作ります。ここではデータはファイル /tmp/example に 格納されているものとします。
conn = sqlite3.connect('/tmp/example')
特別な名前である ":memory:" を使うと RAM 上にデータベースを作るこ ともできます。
Connection があれば、 Cursor オブジェクトを作りそ の execute() メソッドを呼んで SQL コマンドを実行することができ ます。
c = conn.cursor() # Create table c.execute('''create table stocks (date text, trans text, symbol text, qty real, price real)''') # Insert a row of data c.execute("""insert into stocks values ('2006-01-05','BUY','RHAT',100,35.14)""")
たいてい、SQL 操作は Python 変数の値を使う必要があります。この時、クエ リーを Python の文字列操作を使って構築することは、安全とは言えないので、 すべきではありません。そのようなことをするとプログラムが SQL インジェク ション攻撃に対し脆弱になりかねません。
代わりに、DB-API のパラメータ割り当てを使います。"?" を変数の値を 使いたいところに埋めておきます。その上で、値のタプルをカーソル の execute() メソッドの第2引数として引き渡します。(他のデータ ベースモジュールでは変数の場所を示すのに"%s" や ":1" などの 異なった表記を用いることがあります。) 例を示します。
# Never do this -- insecure! symbol = 'IBM' c.execute("... where symbol = '%s'" % symbol) # Do this instead t = (symbol,) c.execute('select * from stocks where symbol=?', t) # Larger example for t in (('2006-03-28', 'BUY', 'IBM', 1000, 45.00), ('2006-04-05', 'BUY', 'MSOFT', 1000, 72.00), ('2006-04-06', 'SELL', 'IBM', 500, 53.00), ): c.execute('insert into stocks values (?,?,?,?,?)', t)
SELECT 文を実行した後データを取得する方法は3つありどれを使っても構いま せん。一つはカーソルをイテレータとして扱う、一つはカーソル の fetchone() メソッドを呼んで一致した内の一行を取得する、もう 一つは fetchall() メソッドを呼んで一致した全ての行のリストとし て受け取る、という3つです。
以下の例ではイテレータの形を使います。
>>> c = conn.cursor() >>> c.execute('select * from stocks order by price') >>> for row in c: ... print row ... (u'2006-01-05', u'BUY', u'RHAT', 100, 35.140000000000001) (u'2006-03-28', u'BUY', u'IBM', 1000, 45.0) (u'2006-04-06', u'SELL', u'IBM', 500, 53.0) (u'2006-04-05', u'BUY', u'MSOFT', 1000, 72.0) >>>
参考: