У меня есть сервер, который позволяет (администраторам) создавать, удалять или редактировать данные других пользователей,
Я создал базу данных вместе с ее курсорами внутри функции:
def DBSetup():
global schoolDBConn, schoolDBCursor
print("Setting up databases")
schoolDBConn = sqlite3.connect("SCHOOL_DB.db")
schoolDBCursor = schoolDBConn.cursor()
schoolDBCursor.execute(
"""
CREATE TABLE IF NOT EXISTS USER_DETAILS
(
username text,
password text,
clearance int,
classes int
)
"""
)
schoolDBCursor.execute( #line 300
"""
CREATE TABLE IF NOT EXISTS CLASSES
(
className text,
supervisor text,
assignmentName text
)
"""
)
schoolDBCursor.execute(
"""
CREATE TABLE IF NOT EXISTS ASSIGNMENT
(
setDate text,
dueDate text,
assignmentInfo text,
supervisor text
)
"""
)
Я вызываю это, когда сервер запускается, а затем начинаю свою ветку:
if __name__ == "__main__":
DBSetup()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((host, port))
s.listen(1)
while True:
conn, addr = s.accept()
connThread = Thread(target=handler, args=(conn, addr))
connThread.daemon = True
connThread.start()
Однако внутри моего потока, всякий раз, когда я использую функцию, которая редактирует базу данных, я получаю эту ошибку:
SQLITE3 ERROR:
SQLite objects created in a thread can only be used in that same thread.The object was created in thread id 9628 and this is thread id 12400
Я использую глобальные блокировки в моей программе «С global_lock:» всякий раз, когда я редактирую базу данных.
Заранее спасибо