Python數(shù)據(jù)庫(kù)操作怎樣處理事務(wù)

小樊
81
2024-10-24 19:02:37

在Python中,可以使用sqlite3庫(kù)來處理SQLite數(shù)據(jù)庫(kù)的事務(wù)。以下是一個(gè)示例代碼,展示了如何在Python中使用sqlite3庫(kù)進(jìn)行事務(wù)處理:

import sqlite3

# 連接到數(shù)據(jù)庫(kù)
conn = sqlite3.connect('example.db')
cursor = conn.cursor()

try:
    # 開始事務(wù)
    cursor.execute("BEGIN TRANSACTION")

    # 執(zhí)行SQL語(yǔ)句
    cursor.execute("INSERT INTO test (col1, col2) VALUES (?, ?)", values1)
    cursor.execute("INSERT INTO test (col1, col2) VALUES (?, ?)", values2)

    # 提交事務(wù)
    conn.commit()
except:
    # 發(fā)生異常,回滾事務(wù)
    conn.rollback()
    raise
finally:
    # 關(guān)閉游標(biāo)和連接
    cursor.close()
    conn.close()

在上面的示例代碼中,我們首先連接到名為example.db的SQLite數(shù)據(jù)庫(kù)。然后,我們使用cursor對(duì)象執(zhí)行SQL語(yǔ)句,并使用BEGIN TRANSACTION開始事務(wù)。接下來,我們執(zhí)行了兩個(gè)INSERT語(yǔ)句,將數(shù)據(jù)插入到test表中。最后,我們使用conn.commit()提交事務(wù)。

如果在執(zhí)行SQL語(yǔ)句時(shí)發(fā)生異常,我們會(huì)捕獲該異常并使用conn.rollback()回滾事務(wù)。這樣可以確保數(shù)據(jù)的一致性,避免因?yàn)楫惓6鴮?dǎo)致的數(shù)據(jù)不一致問題。

無論是否發(fā)生異常,我們都會(huì)在finally塊中使用cursor.close()關(guān)閉游標(biāo),并使用conn.close()關(guān)閉數(shù)據(jù)庫(kù)連接。這樣可以確保資源的正確釋放,避免資源泄漏問題。

0