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更新命令找不到列并且数据库被锁定的主要内容,如果未能解决你的问题,请参考以下文章
如何修复“java.sql.SQLException:找不到列 'id'。” Spring Boot 中的错误