概要
sqlite3モジュールを使用してDB更新する方法についてまとめた。
以下の操作について扱う。
・テーブル作成/削除
・レコード作成/更新/削除
前提
DB環境構築~DBファイルの作成ができていること。
概要 PythonでSQLite3を使用するにあたり、SQLite3の環境構築を実施したので方法についてまとめた。SQLite3実行ファイルをダウンロードして環境変数のPATHを通すところまで行っている。 […]
概要
SQLite3のデータベースファイルを作成し、テーブル操作を行ったのでその方法についてまとめた。
前提
前提として、SQLite3の環境構築をしていること。[sitecar[…]
概要
sqlite3モジュールを使用して、DB参照をする方法についてまとめた。SQLiteで作成したDBファイルを操作対象としている。
前提
DB環境構築~DBファイルの作成がで[…]
DBファイル
以下のSQLiteで作成したDBファイルに対して操作を行う。
dbファイルのパス
│ about_sqlite3.ipynb ⇒実行ファイル
│
└─db
test.db ⇒DBファイル
テーブル作成/削除
テーブルを新規作成する際にはexecuteメソッドを使用する。
また、削除する際も同様にexecuteメソッドを使用する。
import sqlite3
import os
# DB接続
sqlite_path = os.path.join("db", "test.db")
con = sqlite3.connect(sqlite_path)
cur = con.cursor()
# sampleテーブル作成
cur.execute("DROP TABLE IF EXISTS sample")
cur.execute("CREATE TABLE IF NOT EXISTS sample (id INTEGER PRIMARY KEY, item TEXT)")
# DBとの接続切断
con.close()
上記ではsampleテーブルが存在している場合、テーブルの削除を行う。
次にsampleテーブルを新規作成している。
テーブル操作の流れ
テーブル操作(INSERT, UPDATE, DELETE)は以下の流れで行う。
・1件更新の場合、sqlite3.Cursorオブジェクト.execute()を使用する
・複数件更新の場合、sqlite3.Cursorオブジェクト.executemany()を使用する
・更新を反映させるため、コミットする
概要 プログラムで動作している際に、予期せぬエラーによってプログラムが落ちる場合がある。 この予期せぬエラーのことを例外(Exception)という。 例外が発生した場合もプログラムを落とさないよう対策(例外処理)してプ[…]
INSERT
1件挿入
レコードを1件挿入する場合、executeメソッドを使用する。
import sqlite3
import os
# DB接続
sqlite_path = os.path.join("db", "test.db")
con = sqlite3.connect(sqlite_path)
cur = con.cursor()
try:
# sampleテーブル作成
cur.execute("DROP TABLE IF EXISTS sample")
cur.execute("CREATE TABLE IF NOT EXISTS sample (id INTEGER PRIMARY KEY, item TEXT)")
# 1件データ挿入
cur.execute("INSERT INTO sample VALUES (1, 'えんぴつ')")
cur.execute("INSERT INTO sample VALUES (?, ?)", (2, "消しゴム"))
# コミット
con.commit()
except sqlite3.Error as e:
print("SQLエラー", e.args[0])
# sample検索
cur.execute("SELECT * FROM sample")
print(cur.fetchall())
# DBとの接続切断
con.close()
# --------------------------------------
# 出力
#[(1, 'えんぴつ'), (2, '消しゴム')]
複数件挿入
レコードを複数件挿入する場合、executemanyメソッドを使用する。
import sqlite3
import os
# DB接続
sqlite_path = os.path.join("db", "test.db")
con = sqlite3.connect(sqlite_path)
cur = con.cursor()
try:
# sampleテーブル作成
cur.execute("DROP TABLE IF EXISTS sample")
cur.execute("CREATE TABLE IF NOT EXISTS sample (id INTEGER PRIMARY KEY, item TEXT)")
# 複数データ挿入
data = [
(1, "えんぴつ"),
(2, "消しゴム"),
(3, "ものさし"),
(4, "筆箱")
]
cur.executemany("INSERT INTO sample VALUES (?, ?)", data)
# コミット
con.commit()
except sqlite3.Error as e:
print("SQLエラー", e.args[0])
# sample検索
cur.execute("SELECT * FROM sample")
print(cur.fetchall())
# DBとの接続切断
con.close()
# --------------------------------------
# 出力
#[(1, 'えんぴつ'), (2, '消しゴム'), (3, 'ものさし'), (4, '筆箱')]
UPDATE
1件更新
レコードを1件更新する場合、executeメソッドを使用する。
import sqlite3
import os
# DB接続
sqlite_path = os.path.join("db", "test.db")
con = sqlite3.connect(sqlite_path)
cur = con.cursor()
try:
# 1件更新
cur.execute("UPDATE sample SET item=? WHERE id=?", ("シャーペン", 1))
# コミット
con.commit()
except sqlite3.Error as e:
print("SQLエラー", e.args[0])
# 動作確認
cur.execute("SELECT * FROM sample")
print(cur.fetchall())
# DBとの接続切断
con.close()
# --------------------------------------
# 出力
#[(1, 'シャーペン'), (2, '消しゴム'), (3, 'ものさし'), (4, '筆箱')]
複数件更新
レコードを複数件更新する場合、executemanyメソッドを使用する。
import sqlite3
import os
# DB接続
sqlite_path = os.path.join("db", "test.db")
con = sqlite3.connect(sqlite_path)
cur = con.cursor()
try:
# 複数更新
data = [
("修正液", 2),
("定規", 3),
("ペンケース", 4)
]
cur.executemany("UPDATE sample SET item=? WHERE id=?", data)
# コミット
con.commit()
except sqlite3.Error as e:
print("SQLエラー", e.args[0])
# 動作確認
cur.execute("SELECT * FROM sample")
print(cur.fetchall())
# DBとの接続切断
con.close()
# --------------------------------------
# 出力
#[(1, 'シャーペン'), (2, '修正液'), (3, '定規'), (4, 'ペンケース')]
DELETE
1件削除
レコードを1件削除する場合、executeメソッドを使用する。
import sqlite3
import os
# DB接続
sqlite_path = os.path.join("db", "test.db")
con = sqlite3.connect(sqlite_path)
cur = con.cursor()
try:
# 1件削除
cur.execute("DELETE FROM sample WHERE id=?", (1,))
# コミット
con.commit()
except sqlite3.Error as e:
print("SQLエラー", e.args[0])
# 動作確認
cur.execute("SELECT * FROM sample")
print(cur.fetchall())
# DBとの接続切断
con.close()
# --------------------------------------
# 出力
#[(2, '修正液'), (3, '定規'), (4, 'ペンケース')]
複数件削除
レコードを複数件削除する場合、executemanyメソッドを使用する。
import sqlite3
import os
# DB接続
sqlite_path = os.path.join("db", "test.db")
con = sqlite3.connect(sqlite_path)
cur = con.cursor()
try:
# 複数削除
data = [
(2,),
(3,)
]
cur.executemany("DELETE FROM sample WHERE id=?", data)
# コミット
con.commit()
except sqlite3.Error as e:
print("SQLエラー", e.args[0])
# 動作確認
cur.execute("SELECT * FROM sample")
print(cur.fetchall())
# DBとの接続切断
con.close()
# --------------------------------------
# 出力
[(4, 'ペンケース')]