我想从变量更新数据,但是我不知道为什么在执行代码时会显示此错误消息:
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)
我不知道如何解决此问题。谢谢您的帮助。
答案 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.close
和with conexion:
来安抚共轭并自行关闭。