gpt4 book ai didi

python - sqlite 提交未使用 python 更新保存更改?

转载 作者:行者123 更新时间:2023-12-01 07:53:01 25 4
gpt4 key购买 nike

描述

我已经使用 sqlite 在 python3 中构建了一个数据库。到目前为止,我在提交保存更改(使用插入命令和删除命令)方面没有遇到任何问题。但是,我尝试使用更新命令,但无法保存更改(尽管调用了 commit(),它仅更改了工作内存中的数据库。

此代码片段的目标是用空字符串替换数据库中的空值,因为我有另一个无法处理空数据的函数。我在这里找到了一个解决方案:Find null values from table and replace it with space - sqlite .

详细信息

这是我正在尝试执行的当前代码:

self.cursor.execute(f'UPDATE {tbl_name} SET {col_name} = IFNULL({col_name}, "")')
self.conn.commit()

这段代码基本上一次一列地遍历整个数据库并替换空值。

请注意 self 定义如下:

Database.conn = sqlite3.connect(self.location + self.name)
Database.cursor = sqlite3.connect(self.location + self.name).cursor()

如前所述,这可以正确运行;但是,它不会将更改提交到实际数据库。这通过 sqlite 的数据库浏览器以及在关闭并重新执行时再次拉取数据来验证。

我还将注意到,如果我关闭该程序并重新初始化它以再次运行它,它将出错,因为尽管我的代码的最后一行是:数据库仍然被锁定:

Database.conn.commit() # Save (commit) the changes
Database.conn.close() # Close database

结论

提前致谢,因为我一直在用这个把头撞在墙上,但尚未在其他地方发现类似的问题!

最佳答案

您的数据库连接与您的光标无关。

你愿意

Database.conn = sqlite3.connect(self.location + self.name)
Database.cursor = sqlite3.connect(self.location + self.name).cursor()

因此,通过为游标创建新连接,以下 Database.conn.commit() 将不会提交您对 cursor 所做的任何更改。

像这样创建光标以在连接和光标之间建立连接:

Database.conn = sqlite3.connect(self.location + self.name)
Database.cursor = Database.conn.cursor()

关于python - sqlite 提交未使用 python 更新保存更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56100952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com