Почему возникает ошибка с записью в базу данных SQLite3?(Python3)

Я делал окнонное приложение на Python 3 с помощью модуля PyQt5. Мне нужно записывать информацию в базу данных SQLite3 внутри потока. Я пытался сделать это, но в ответ получил ошибку:

sqlite3.ProgrammingError: SQLite objects created in a thread can only be used in that same thread. The object was created in thread id 7384 and this is thread id 6520.

Вот сам код:

# -*- coding: utf-8 -*-
import sqlite3
from PyQt5 import QtCore, QtWidgets

con = sqlite3.connect('database.db')
cur = con.cursor()
cur.execute('''CREATE TABLE IF NOT EXISTS info(info1 TEXT,
                                               info2 TEXT)''')
con.commit()

def write_info():
    info1 = 'one'
    info2 = 'two'
    cur.execute('INSERT INTO info VALUES(?, ?)', (info1, info2))
    con.commit()

class MyThread(QtCore.QThread):
    def __init__(self, parent=None):
        QtCore.QThread.__init__(self, parent)
    def run(self):
        print('THREAD: run')
        write_info()

class MyWindow(QtWidgets.QWidget):

    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)
        self.vbox = QtWidgets.QVBoxLayout()
        self.button = QtWidgets.QPushButton('Button')
        self.vbox.addWidget(self.button)
        self.button.clicked.connect(self.button_f)
        self.setLayout(self.vbox)

    def button_f(self):
        self.mythread = MyThread(self)
        self.mythread.started.connect(self.on_started)
        self.mythread.finished.connect(self.on_finished)
        self.mythread.start()

    def on_started(self):
        print('THREAD: start')

    def on_finished(self):
        print('THREAD: finish')

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    window = MyWindow()
    window.setWindowTitle(' ')
    window.show()
    sys.exit(app.exec_())

Пожалуйста, подскажите, что я делаю неправильно?


Ответы (1 шт):

Автор решения: Миша Младший

В подключении к базе данных добавьте это:

conn = sqlite3.connect('database.db', check_same_thread=False)
→ Ссылка