田舎社会人のいろいろ学習記

Python、英語、その他いろいろ

【sqlite3】手動コミット・自動コミットを設定する方法【Python】

f:id:vigilantPotato:20210704082302p:plain
データベースにSQL文で命令を実行しても、コミットするまではデータベースの変更は実行されないため、通常は命令実行後に明示的にコミットを実施する必要がある。コミットする方法及び、自動コミットモードを設定する方法をまとめた。 データベースの基本的な作成方法は、以下の記事を参照。以下の例では、自動コミットを使用している。


【スポンサーリンク】


コミットする方法

通常、SQL命令文を実行後は、commitメソッドで実際にデータベースへの変更を行う必要がある。コミットの処理には時間がかかるため、1度に大量の処理を実施する際はSQL命令文だけ先に全て実行し、その後コミットを行うことで処理時間を短縮することができる。

import sqlite3

#データベース読み込み
db = sqlite3.connect("test.db")

#フィールド作成用SQL文
sql = """
    CREATE TABLE Fruit (
        id INTEGER PRIMARY KEY,
        name VARCHAR(20),
        price INTEGER
    );
"""

db.execute(sql) #sql文を実行

#登録データ
r = [(1, "banana", 130), (2, "apple", 100), (3, "orange", 198)]

#レコード一括登録登録用SQL文
sql = """
    INSERT INTO Fruit VALUES (
        ?, ?, ?
    )
"""

db.executemany(sql, r)  #sql文を実行
db.commit()             #コミット
db.close()              #データベースを閉じる

executeメソッドとexecutemanyメソッド実行時にはデータベースの変更は実行されておらず、commitメソッド実行時に変更が反映される。

[↑ 目次へ]


自動コミットモードの設定方法

データベース生成時にオプションでisolation_level=Noneを設定することで、自動コミットモードに設定することができる。SQL命令文実行後すぐにコミットが自動的に実行されるため、commitメソッドが不要になる。

import sqlite3

#データベース読み込み
db = sqlite3.connect(
    "test.db",
    isolation_level=None,
    )

#フィールド作成用SQL文
sql = """
    CREATE TABLE Fruit (
        id INTEGER PRIMARY KEY,
        name VARCHAR(20),
        price INTEGER
    );
"""

db.execute(sql) #sql文を実行

#登録データ
r = [(1, "banana", 130), (2, "apple", 100), (3, "orange", 198)]

#レコード一括登録登録用SQL文
sql = """
    INSERT INTO Fruit VALUES (
        ?, ?, ?
    )
"""

db.executemany(sql, r)  #sql文を実行
db.close()              #データベースを閉じる

この例では、executeメソッドやexecutemanyメソッド実行時に一緒にコミットされる。

[↑ 目次へ]


【スポンサーリンク】