使用UPDATE时如何防止SQL数据库被锁定?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用UPDATE时如何防止SQL数据库被锁定?相关的知识,希望对你有一定的参考价值。
我有一个程序,它使用几个SQL数据库来存储数据。我有一个管理各种sql函数的类,比如获取值,整个表或只是更新值。在运行使用UPDATE的函数之前,所有进程都可以正常工作。我执行UPDATE命令并尝试提交更改,数据库始终处于锁定状态。我在自定义sql类中的每个函数都有
cursor.close
database.close
因此,数据库连接仍然没有任何问题。我错过了这种语法中没有正确连接到数据库的东西吗?我使用额外的打印语句试图找出问题发生的位置,因此可以忽略这些。
import sqlite3 as db
import os
databaseName = "site"
class MassDb:
def __init__(self,databaseName):
super(MassDb, self).__init__()
print("Current Directory: ",os.getcwd())
self.databaseName = databaseName
def updateValue(self, location, metric, input_value):
print("OPEN CONNECTION UPDATE - running updateValue: ",location, metric, input_value)
if self.databaseName == "site":
try:
siteConn = db.connect("site_data.db")
siteCursor = siteConn.cursor()
siteCursor.execute("UPDATE sites SET " + metric + " = ? WHERE LOCATI ON = ?", (input_value, location))
siteConn.commit()
except:
print("UPDATE FAILED")
finally:
siteCursor.close
siteConn.close
elif self.databaseName == "comp":
try:
compConn = db.connect("comp_data.db")
compCursor = compConn.cursor()
compCursor.execute("UPDATE competitors SET " + metric + " = ? WHERE NAME = ?", (input_value, location))
compConn.commit()
except:
print("UPDATE FAILED")
finally:
compCursor.close
compConn.close
print("CLOSED CONNECTION UPDATE - Update Connection Closed")
else:
print("Update Error")
MassDb("site").updateValue("Location", "CURRENT_SCORE", "100")
答案
正如@roganjosh评论的那样,我的问题是我没有正确关闭数据库。如果
commit()
使用时,不需要关闭数据库。然而,
cursor.close()
和
conn.close()
需要这样写。离开括号就好像引用了一个属性,而不是一个方法。为了执行close方法,必须存在()。现在似乎显而易见,但我当时并不知道。希望如果他们遇到这个问题,这可以帮助其他人。
以上是关于使用UPDATE时如何防止SQL数据库被锁定?的主要内容,如果未能解决你的问题,请参考以下文章
在 SQL Server 中,如何以类似于 Oracle 的“SELECT FOR UPDATE WAIT”的方式锁定单行?