PythonでSQLite3
PythonでSQLite3の使い方のメモです。
SQLite3のライブラリインポート
import sqlite3
データベースへのコネクションを取得
conn = sqlite3.connect('warehouse.db')
引数でDBファイルを指定します。
カーソルの取得
cur = conn.cursor()
コネクションからカーソルを取得します。カーソルを通してテーブルから値を取り出したり、更新したりします。
SQL文実行
cur.execute('....<SQL>...')
結果の取得
cur.fetchall()
SQLの実行結果を取得します。1つだけ取得するfetchone()もあります。
with構文でコネクションのクローズ
withの中でコネクションを生成すると、withを抜けた際に自動でコネクションをクローズしてくれて便利です。
with sqlite3.connect('warehouse.db') as conn: cur = conn.cursor()
サンプル
import sqlite3 class Warehouse: # DB初期化 def __init__(self): with sqlite3.connect('warehouse.db') as conn: cur = conn.cursor() cur.execute('CREATE TABLE IF NOT EXISTS \ stocks(name VARCHAR(128) UNIQUE, amount INT)') # データ追加 def add_stock(self, name, amount): with sqlite3.connect('warehouse.db') as conn: cur = conn.cursor() cur.execute('INSERT INTO stocks(name, amount) VALUES (?, ?)', (name, amount)) # データ一覧取得 def list_stocks(self): with sqlite3.connect('warehouse.db') as conn: cur = conn.cursor() cur.execute('SELECT name, amount from stocks ORDER BY name') return cur.fetchall()
withとtryを一緒に使って、DB操作時の例外処理もわりとシンプルにかけます。
def add_stock(self, name, amount):
try:
with sqlite3.connect('warehouse.db') as conn:
cur = conn.cursor()
cur.execute('INSERT INTO stocks(name, amount) VALUES (?, ?)',
(name, amount))
except:
# do some thing...
raise BaseException("Already inserted: " + name)