更新时如何修复“数据库已锁定”?

时间:2019-04-23 13:43:29

标签: python python-3.x tkinter sqlite

我想从变量更新数据,但是我不知道为什么在执行代码时会显示此错误消息:

line 18, in save
curseur.execute("UPDATE SAV SET Commentaires_SAV=(?)", (T_Comment.get("1.0", END),) )
sqlite3.OperationalError: database is locked

我正在Atom上运行脚本,使用python 3.7.2,并使用SQLite3和SQLite Studio来处理所有数据。

import sqlite3
from tkinter import *

connexion = sqlite3.connect('Base_SAV.db')            
curseur = connexion.cursor()                       
curseur.execute("PRAGMA foreign_keys =ON")

def save(event):
   curseur.execute("UPDATE SAV SET Commentaires_SAV=(?)", (T_Comment.get("1.0", END),) )

... 

L_Comment = Label(my_frame, text='Commentaires SAV :', font=('Arial', 22, 'bold','underline')).grid(row=1, column=1, sticky='w')
T_Comment = Text(my_frame, height=10, width=100,font=('Arial',14))
T_Comment.grid(row=2, column=1,columnspan=7, sticky='w')

...
my_frame.bind("<Return>", save)

我不知道如何解决此问题。谢谢您的帮助。

2 个答案:

答案 0 :(得分:2)

这意味着sqlite3 journal仍在运行关闭正在使用的数据库浏览器,然后再次运行脚本,它将起作用。而且,请不要忘记在update结束后关闭连接。 / p>

curseur.commit()
curseur.close()

答案 1 :(得分:0)

您需要连接到数据库,提交更改,然后关闭conexion。

尝试更改此内容:

def save(event):
       curseur.execute("UPDATE SAV SET Commentaires_SAV=(?)", (T_Comment.get("1.0", END),) )

对此:

def save(event):
   with conexion:
      curseur.execute("UPDATE SAV SET Commentaires_SAV=(?)", (T_Comment.get("1.0", END),) )

因此,避免在curseur.commit语句中使用curseur.closewith conexion:来安抚共轭并自行关闭。