13.13 sqlite3 -- SQLite データベースに対する DB-API 2.0 インタフェース

バージョン 2.5 で 新たに追加 された仕様です。

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)
>>>

参考:

http://www.pysqlite.org
pysqlite のウェブページ

http://www.sqlite.org
SQLite のウェブページ。 ここの文書ではサポートされる SQL 方言の文法と使えるデータ型を説明しています

PEP 249, Database API Specification 2.0
Marc-André Lemburg により書かれた PEP

http://www.python.jp/doc/contrib/peps/pep-0249.txt
訳注: PEP 249 の日本語訳があります



Subsections
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。