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 не умеет обрабатывать одновременную запись. Либо передавай подключение как переменную в второй файл, либо вызывай второй файл после закрытия первого подключения.

→ Ссылка