沒有 COMMIT 事務的 Python Sqlite3 執行腳本(sql_script)

威廉·尼基奧

來自Python Sqlite3文檔

executescript(sql_script)

這是一次執行多個 SQL 語句的非標準便捷方法。它首先發出 COMMIT 語句,然後執行它作為參數獲取的 SQL 腳本。該方法無視isolation_level;任何事務控制都必須添加到 sql_script。

我的問題:我正在執行一系列帶有多個語句的 sql 腳本,例如:

db = sqlite3.connect(my_db_path)
for sql_file in files:
  f = open(sql_file)
  update_script = f.read()
  f.close()
  
  db.executescript(update_script)

executescript()方法在執行之前進行提交,因此如果它在過程中間失敗,我無法對所有文件進行事務控制以回滾到初始狀態,因為它在每次迭代中提交。

我需要一種僅在 for 循環之後而不是在每次迭代結束時提交的方法。我沒有設法使該方法execute()工作,因為它不支持多個語句,而且我也沒有設法使其與executemany()方法一起工作,因為如果我的文件碰巧只有一個語句,它就會失敗。

有什麼建議?

DinoCoderSaurus

如果所有腳本都需要作為一個事務來執行,而不是讀、執行、讀、執行……嘗試讀、讀、讀……執行。換句話說,將所有文件的內容讀入update_script,然後執行它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有沒有辦法計算 SQL 中的事務更改?

在 Django 的 ORM 中,有沒有辦法檢測代碼是否在事務內執行?

有沒有辦法在必要時通過時間填充來執行具有一致執行時間的python腳本?

Python sqlite3从不返回具有2800万行以上的内部联接

如何在python中的SQlite3中获取具有多个条件的行的值?

Python sqlite3:运行不同的sqlite3版本

Python SQLite3:为什么缩进conn.commit()语句会产生这种影响?

带有参数的Python SQlite3插入

带有冒号查找的Python SQLite3 Mac地址

带有Python的Sqlite3返回额外的数据

Python 的 sqlite3 不会获取所有结果

SQLITE3与Python

的Python:sqlite3

試圖運行我的 python 腳本沒有做任何事情

如何運行python腳本直到它結束而沒有錯誤?

SQLite在使用參數和事務時不插入多於一行

Python SQLite3:想要迭代地获取行,但是代码拉动其他所有行

Python SQLite3 /从表中选择行

使用Python和SQLite3动态生成SQL查询

当涉及到以注释开头的 SQL 查询时,Python sqlite3 模块是否有问题和缓慢?

使用ʻexecutemany`更新现有SQLite3数据库中的条目(使用Python sqlite3)

如何使用带有参数化占位符的sqlite3 Python库创建SQLite表?

Python SQLite3插入

python sqlite3查询与

SQLite3 Python变量

Python 腳本未執行

使用Python3 / sqlite3创建具有未知列数的表

從另一個腳本運行一個 python 腳本,其中命令行參數具有可執行文件

sqlite3.OperationalError:没有这样的列:对于sqlite3 python中的更新命令

TOP 榜单

热门标签

归档