0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonからsqliteを操作

Posted at

1 インポート

Pythonは標準ライブラリにsqlite3が含まれているので、importするだけで使うことができる。

import sqlite3

2 データベースに接続、カーソルを取得

データベースファイルの名前を指定して接続し、接続からカーソルを取得する。
ファイルが存在しない場合は新規作成されるので、既存のファイルに接続する場合は、別途ファイルの存在チェックをしたほうが良いかもしれない。

con = sqlite3.connect("sample.db")
cur = con.cursor()

特殊な使い方として、データベース名に":memory:"を指定すると、メモリ上にデータベースを作成できる。

con = sqlite3.connect(":memory:")

3 SQLを実行

3.1 基本的な実行方法

カーソルのメソッドexecute()に、文字列でSQLを渡すことでSQLを実行できる。

cur.execute("CREATE TABLE people ( id INTEGER PRIMARY KEY, name TEXT, score INTEGER)")

接続したファイルが正常なsqliteファイルでなかった場合、接続する段階ではエラーが出ず、SQLを実行するタイミングでエラーが投げられる仕様になっているようなので、エラーハンドリングする際には注意すること。

3.2 変数を使用したいとき

SQL内で変数を使いたい場合、変数を挿入する箇所を?にする。引数にタプルを渡すと、タプルの要素をSQLに挿入してから実行してくれる。

name_sample = "Bob"
score_sample = 80
cur.execute("INSERT INTO people (name,score) VALUES (?,?)",(name_sample, score_sample))

文字列のエスケープなども適切に行ってくれるので、変数を使いたいときは、単純に文字列連結するのではなくこの方法を使ったほうがよい。

3.3 複数のデータに対してまとめてSQLを実行したいとき

executemany()を使用することで、複数のデータに対して同じ処理を一括で行うことができる。

datalist = [ ("Katou",60) , ("Suzuki",75) , ("Yamada",80) ]
cur.executemany("INSERT INTO people (name,score) VALUES (?,?)" , datalist)

3.4 SELECT文の結果を取得したいとき

execute()の戻り値を受け取り、fetchall()を実行することでSELECT文の実行結果を取得できる。
行列はタプルのリストとして表現される。

response = cur.execute("SELECT * FROM people")
matrix = response.fetchall()
print(matrix)
[(1, 'Bob', 80), (2, 'Katou', 60), (3, 'Suzuki', 75), (4, 'Yamada', 80)]

fetchall()の代わりにfetchone()を使うと、データをタプルとして一行ごとに取得できる。

response = cur.execute("SELECT * FROM people")
line1 = response.fetchone()
line2 = response.fetchone()
print(line1)
print(line2)
(1, 'Bob', 80)
(2, 'Katou', 60)

4 コミット、終了

pythonのsqlite3モジュールの場合、デフォルトではコミットするまで操作が反映されない。
更新した場合は終了前にコミットが必要になる。

con.commit()
con.close()

コードの途中でコミットしていない更新を破棄したい場合、rollback()を実行する。

con.rollback()

参考リンク

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?