Python中的SQL更新命令找不到列并且数据库被锁定

Posted

技术标签:

【中文标题】Python中的SQL更新命令找不到列并且数据库被锁定【英文标题】:SQL Update Command in Python cannot find column and database gets locked 【发布时间】:2021-05-17 23:29:24 【问题描述】:

我正在尝试将 SQL 数据库中的整数加一,但在运行以下代码时出现我的数据库被锁定的错误:

cursor.execute("""SELECT score FROM scores WHERE name=?""", (user,)) # works
new_score = cursor.fetchone()[0] + 1 # works

params = (new_score, user) 
cursor.execute("""UPDATE scores SET score=? WHERE name=?""", params) # error here
new_score 是变量类型 int 加一 user 是数据库中“名称”列下的字符串 scores 是表名 score是数据库中的列名

感谢您的帮助!

【问题讨论】:

my database is locked ...您的实际 SQL 数据库是什么? sqlite3.我认为它被锁定了,因为基于***.com/questions/3172929/… 的过程花费了太长时间。我更不确定为什么上面的代码有问题 name 是关键列吗?你的桌子有多大? 是的,名称是关键列。我的表有两列(名称和分数),大约 70 行 这类似于***.com/questions/2740806/…。请检查。 【参考方案1】:

如果您的数据库将其显示为已锁定,请检查该实例上正在运行的进程,以及您的进程是否被其他进程阻塞,或者您的进程正在阻塞其他进程并且无法找到执行查询的资源。

通常,死锁的解决方案是终止任何一个查询。根据优先级选择需要终止的查询。根据您使用的数据库,您可以找到相应的查询来查找在任何给定时间点运行的进程。

如果您在 MS SQL Server 上运行查询,则使用命令 EXEC sp_who 这将显示正在运行的进程列表。然后使用命令EXEC KILL spid_of_the_query 终止查询。查找在您运行此更新查询的实例上运行的查询。

【讨论】:

我认为这不是基于***.com/questions/3172929/… 的问题。我主要不确定为什么这里标记为#error 的代码有问题。谢谢你的回答,如果我错了,请告诉我 直接在数据库上运行相同的更新命令,看看是否工作正常或是否也抛出错误。 在我运行 UPDATE scores SET score = 505 WHERE name = "Swag" 时成功运行 尝试使用您在执行中使用的命令进行重建。 cursor.execute("""UPDATE scores SET score=? WHERE name=?""", params) 更改如下。 update_str = 'UPDATE scores SET score=' + str(new_score) + 'WHERE name=' + user 然后运行如下命令。 cursor.execute(update_str); 数据库在更改为update_str = 'UPDATE scores SET score=' + str(new_score) + ' WHERE name=' + "'" + user + "'" 时被锁定。当它只是update_str = 'UPDATE scores SET score=' + str(new_score) + ' WHERE name=' + user 时,我收到错误“sqlite3.OperationalError: no such column: Swag”(Swag 是 user 的字符串)【参考方案2】:

事实证明,我从未在我使用的 SQLite 浏览器中关闭我的连接。感谢大家的回复!

【讨论】:

以上是关于Python中的SQL更新命令找不到列并且数据库被锁定的主要内容,如果未能解决你的问题,请参考以下文章

sql语句被忽略并且找不到关键字

如何修复“java.sql.SQLException:找不到列 'id'。” Spring Boot 中的错误

Bash中的“[0:找不到命令”

更新python 找不到命令 linux

如果在 Hive SQL 中找不到匹配项,则提供要加入的备用列

错误的 SQL 语法...找不到列“COUNT(status)”