python - 没有 COMMIT 事务的 Python Sqlite3 执行脚本(sql_script)
问题描述
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()
方法一起工作,因为如果我的文件恰好只有一个语句,它将失败。
有什么建议么?
解决方案
如果所有脚本都需要作为一个事务执行,而不是读取,执行,读取,执行,......尝试读取,读取,读取......执行。也就是说,将所有文件的内容读入update_script
,然后执行。
推荐阅读
- php - Laravel 规则:基于两个请求输入的自定义验证
- c - 如何使用 fork() 在 C 中运行 3 个命令?
- html - Google reCAPTCHA v2:加载时遇到无效的“X-Frame-Options”标头
- jmeter - 当为 100 个线程执行 Jmeter 脚本时,Grafana 仪表板将“活动用户”显示为 1
- angular - 我应该为这个 Angular 组件编写哪些测试?
- amazon-web-services - 签名与 presignedUrl DigitalOCeane 上的错误不匹配
- javascript - 为什么我得到未捕获的类型错误属性值无法设置为未定义?
- javascript - 如何将 getter 值绑定到 HTML 中?
- java - 如何在服务器级别而不是在应用程序级别更改 Tomcat 的默认错误页面?
- python - 如何将嵌套的 json 展平为数据框 pandas