【sqlite3】PythonでDB操作:テーブルとレコードの作成、更新、削除方法

概要

sqlite3モジュールを使用してDB更新する方法についてまとめた。
以下の操作について扱う。
・テーブル作成/削除
・レコード作成/更新/削除

 

前提

DB環境構築~DBファイルの作成ができていること。

あわせて読みたい

概要 PythonでSQLite3を使用するにあたり、SQLite3の環境構築を実施したので方法についてまとめた。SQLite3実行ファイルをダウンロードして環境変数のPATHを通すところまで行っている。  […]

【SQLite】環境構築:ダウンロードから環境変数の設定まで

あわせて読みたい

概要 SQLite3のデータベースファイルを作成し、テーブル操作を行ったのでその方法についてまとめた。   前提 前提として、SQLite3の環境構築をしていること。[sitecar[…]

【SQLite】データベースファイルの作成と基本操作

あわせて読みたい

概要 sqlite3モジュールを使用して、DB参照をする方法についてまとめた。SQLiteで作成したDBファイルを操作対象としている。   前提 DB環境構築~DBファイルの作成がで[…]

【sqlite3】PythonでDB操作:テーブルの参照とSQL条件文の作成方法

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)は以下の流れで行う。

・try-catch句で囲む(DB操作時の例外対処)
・1件更新の場合、sqlite3.Cursorオブジェクト.execute()を使用する
・複数件更新の場合、sqlite3.Cursorオブジェクト.executemany()を使用する
・更新を反映させるため、コミットする

 

あわせて読みたい

概要 プログラムで動作している際に、予期せぬエラーによってプログラムが落ちる場合がある。 この予期せぬエラーのことを例外(Exception)という。 例外が発生した場合もプログラムを落とさないよう対策(例外処理)してプ[…]

【例外処理】Pythonで例外処理を行う方法

 

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, 'ペンケース')]

 

スポンサーリンク