sqlite3.OperationalError: database is locked
Возникла проблема при загрузке информации в базу данных, если во втором файле убрать комментарии и запустить отдельно его, то в бд добавится информация, если же запустить его через первый файл вылезет ошибка. Помогите кто чем может.
import sqlite3
import hashlib
from ttkbootstrap import *
from tkinter import *
from tkinter import messagebox
import пробник as function
import main as bdsm
import os
with sqlite3.connect("database11.db") as db:
cursor = db.cursor()
cursor.execute("""CREATE TABLE IF NOT EXISTS users(
login VARCHAR,
password VARCHAR
)""")
reg = Tk()
reg.geometry("400x200")
reg.title("Регистрация")
def register():
text = Label(text="Для входа в систему зарегистрируйтесь")
textLogin = Label(text="Your Login:")
RegLogin = Entry()
textPass = Label(text="Your Password:")
regPass = Entry(show="*")
textPassCon = Label(text="Confirm your Password:")
regPassCon = Entry(show="*")
btnRegister = Button(text="Зарегистрироваться", command=lambda:[PasswordLogin()])
btnLogin = Button(text="Авторизоваться", command=lambda:[login(), reg.destroy()])
text.pack()
textLogin.pack()
RegLogin.pack()
textPass.pack()
regPass.pack()
textPassCon.pack()
regPassCon.pack()
btnRegister.pack()
btnLogin.pack()
def PasswordLogin():
cursor.execute("SELECT login FROM users")
k = len(cursor.fetchall())
cursor.execute("SELECT login FROM users")
for i in range(k):
ex = cursor.fetchmany()
log = ex[0][0]
if log == RegLogin.get():
messagebox.showinfo("Error", "Login already used")
break
if RegLogin.get() == None and regPass == None:
messagebox.showinfo("Error", "Поле логина пустое")
break
if regPass.get() != regPassCon.get():
messagebox.showinfo("Error", "Пароли не совпадают")
break
else:
bdsm.save(RegLogin.get(), regPass.get())
login(), reg.destroy()
register()
reg.mainloop()
второй файл
import sqlite3
import hashlib
#regPass = "admin1"
#RegLogin = "admin1"
def save(RegLogin, regPass):
with sqlite3.connect("database11.db") as db:
cursor = db.cursor()
cursor.execute("""CREATE TABLE IF NOT EXISTS users(
login VARCHAR,
password VARCHAR
)""")
hash_password = str(hashlib.md5(regPass.encode()).hexdigest())
values = [(RegLogin, hash_password)]
cursor.executemany("INSERT INTO users(login, password) VALUES(?,?)", values)
#save(RegLogin, regPass)
Ответы (1 шт):
Автор решения: DiMithras
→ Ссылка
если же запустить его через первый файл вылезет ошибка
Через первый файл где? В теле with sqlite3.connect("database11.db") as db:?
Если так, то создаётся два подключения, причём оба пишущие, из-за этого происходит блокировка. Sqllite3 не умеет обрабатывать одновременную запись. Либо передавай подключение как переменную в второй файл, либо вызывай второй файл после закрытия первого подключения.