はじめに
Pythonの標準ライブラリである"sqlite3"の備忘録.
動作環境
- Python 3.12.0
- SQLite3モジュール 2.6.0
- SQLite 3.42.0
コマンド
データベース作成
import sqlite3
dbFile = 'test.db'
con = sqlite3.connect(dbFile)
con.close()
カレントディレクトリに"test.db"が無ければ作成します.すでに"test.db"が作成されていれば,"test.db"に接続します.
テーブル作成
テーブル作成は以下の手順で行います.
1. データベースに接続
2. カーソルオブジェクトを作成
3. テーブルを作成するCREATE文を実行
4. データベースに情報をコミット
5. データベースの接続を切断
import sqlite3
dbFile = 'test.db'
# 1.データベースに接続
con = sqlite3.connect(dbFile)
# 2.sqliteを操作するカーソルオブジェクトを作成
cur = con.cursor()
# 3.CREATE文を実行
cur.execute("""CREATE TABLE persons(id, name,gender)""")
# 4.データベースに情報をコミット
con.commit()
# 5.データベースの接続を切断
cur.close()
con.close()
テーブルを作成する時の基本となる構文は下記の通りです.
CREATE TABLE テーブル名(カラム名1, カラム名2, ...);
dbファイルにテーブルが存在しない場合のみ作成するときは,"IF NOT EXISTS
"を追記します.
CREATE TABLE IF NOT EXISTS テーブル名(カラム名1, カラム名2, ...);
テーブルにデータ登録(INSERT文)
テーブルに含まれる全てのカラムに値を指定してデータを追加する場合,以下の構文を使用します.
INSERT INTO テーブル名 VALUES(値1, 値2, ...);
テーブルに含まれる特定のカラムを指定してデータを追加する場合,以下の構文を使用します.
INSERT INTO テーブル名(カラム名) values(値1);
以下,サンプルコードです.
import sqlite3
dbFile = 'test.db'
# 1.データベースに接続
con = sqlite3.connect(dbFile)
# 2.sqliteを操作するカーソルオブジェクトを作成
cur = con.cursor()
# 3.テーブルにデータを登録する
# 全てのカラムに値を指定してデータを追加する場合
cur.execute("INSERT INTO persons VALUES('1', 'Sato', 'male');")
# 1つのカラムに値を指定してデータを追加する場合
cur.execute('INSERT INTO persons(name) values("Tanaka")')
# 4.データベースにデータをコミット
con.commit()
# 5.データベースの接続を切断
cur.close()
con.close()
テーブルに含まれる全てのカラムに値を指定して複数のデータを追加する場合,以下のように記述します.
import sqlite3
dbFile = 'test.db'
# 1.データベースに接続
con = sqlite3.connect(dbFile)
# 2.sqliteを操作するカーソルオブジェクトを作成
cur = con.cursor()
# テーブルにデータを登録する
data = (
['1', 'Sato', 'Male'],
['2', 'Tanaka', 'Male'],
['3', 'Yamada', 'Female']
)
sql = "INSERT INTO persons VALUES(?, ?, ?)"
cur.execute(sql, data)
# 4.データベースにデータをコミット
con.commit()
# 5.データベースの接続を切断
cur.close()
con.close()
data
はリスト型かタプル型変数を使用します.
テーブルのカラム数に合わせて括弧内の?
の数を変更してください.
テーブルのデータ取得(SELECT文)
データを取得する際の基本となる構文は以下の通りです.
SELECT カラム名1, カラム名2, ... FROM テーブル名;
SELECT
の後のカラム名を指定することで,特定のデータのみ取得することができます.全てのデータを取得したいときは,上記のスクリプトのように,カラム名の場所を"*
"で記述します.
WHERE
句を使うと取得するデータの条件を絞ることができます.紹介は割愛します.以下,サンプルコードです.
import sqlite3
dbFile = 'test.db'
# 1.データベースに接続
con = sqlite3.connect(dbFile)
# 2.sqliteを操作するカーソルオブジェクトを作成
cur = con.cursor()
# 3.テーブルの全データを取得
cur.execute('SELECT * FROM persons')
# 取得したデータを出力
for row in cur:
print(row)
# 4.データベースの接続を切断
cur.close()
con.close()
テーブルデータの更新(UPDATE文)
テーブルに格納されているデータを新しい値に更新する際の基本となる構文は以下の通りです.
UPDATE テーブル名 SET カラム名1 = 値1, カラム名2 = 値2, ... WHERE 条件式;
WHERE
句の条件式を使用して,更新の対象となるデータを指定します.条件式に一致するデータが複数の場合,該当するデータ全てが更新されます.WHERE
句を省略すると,指定したテーブル内の全てのデータが更新されます.
SET
の後に更新したいカラム名と更新後の値を指定します.以下,サンプルコードです.
import sqlite3
dbFile = 'test.db'
# 1.データベースに接続
con = sqlite3.connect(dbFile)
# 2.sqliteを操作するカーソルオブジェクトを作成
cur = con.cursor()
# 3.テーブルにデータを登録する
data = (
['1', 'Sato', 'Male'],
['2', 'Tanaka', 'Male'],
['3', 'Yamada', 'Female']
)
sql = "INSERT INTO persons VALUES(?, ?, ?)"
cur.execute(sql, data)
# 4.データベースにデータをコミット
con.commit()
# 5.データを更新
cur.execute("UPDATE persons SET name = 'ojisan' WHERE gender = 'Male';")
con.commit()
# 6.データベースの接続を切断
cur.close()
con.close()
これで "gender" 列が "Male" のデータの "name" が "ojisan" になりました.
['1', 'Sato', 'Male'], ['1', 'ojisan', 'Male'],
['2', 'Tanaka', 'Male'], → ['2', 'ojisan', 'Male'],
['3', 'Yamada', 'Female'] ['3', 'Yamada', 'Female']
テーブルデータの削除(DELETE文)
テーブルからデータを削除する際の基本となる構文は以下の通りです.
DELETE FROM テーブル名 WHERE 条件式;
WHERE
句の条件式を使用して,削除の対象となるデータを指定します.条件式に一致するデータが複数の場合は,複数のデータがまとめて削除されます.WHERE
句を省略すると,指定したテーブル内の全てのデータが削除されます.
import sqlite3
dbFile = 'test.db'
# 1.データベースに接続
con = sqlite3.connect(dbFile)
# 2.sqliteを操作するカーソルオブジェクトを作成
cur = con.cursor()
# 3.データを削除する
cur.execute("DELETE FROM persons WHERE name = "ojisan";")
# 4.データベースにデータをコミット
con.commit()
# 5.データベースの接続を切断
cur.close()
con.close()
これで "persons" というテーブルからおじさん("name" が "ojisan" のデータ)が抹消されました.