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)