sqlite提交不使用Python更新保存更改?

时间:2019-05-12 15:53:34

标签: python sqlite sql-update

说明

我有一个已经使用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()

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

请注意,自我定义如下:

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

结论

预先感谢,因为我一直在用这个把头撞在墙上,但是还没有在其他地方找到这样的问题!

1 个答案:

答案 0 :(得分:1)

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

你做

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()