Не видит таблицу в базе данных SQLite

Возник вопрос с добавлением данных в таблицу баз данных SQLite .

Не понимаю, почему не получается добавить в таблицу данные, может ему надо дать указатель на то, с какой БД он должен работать?

from PySide6 import QtWidgets, QtSql


class Data:
    def __init__(self):
        super(Data, self).__init__()
        self.create_connection()

    def create_connection(self):
        db = QtSql.QSqlDatabase.addDatabase('QSQLITE')
        db.setDatabaseName('stud.db')

        if not db.open():
            QtWidgets.QMessageBox.critical(None, "Cannot open database",
                                           "Click Cancel to exit.", QtWidgets.QMessageBox.Cancel)
            return False

        query = QtSql.QSqlQuery()
        query.exec("CREATE TABLE IF NOT EXISTS infa (ID integer primary key AUTOINCREMENT, Name VARCHAR(20), "
                   "Familia VARCHAR(20), Gruppa VARCHAR(20), Ocenka integer)")
        return True

    def execute_query_with_params(self, sql_query, query_values=None):
        query = QtSql.QSqlQuery()
        query.prepare(sql_query)

        if query_values is not None:
            for query_value in query_values:
                query.addBindValue(query_value)

        query.exec()

        return query

    def add_new_transaction_query(self, Name, Familia, Gruppa):
        sql_query = ('''INSERT INTO infa (Name, Familia, Gruppa) VALUES (?, ?, ?)''', (Name, Familia, Gruppa))
        self.execute_query_with_params(sql_query, [Name, Familia, Gruppa])

В INSERT INTO infa подсвечивается красным, и в таблицу данные не добавляются.


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

Автор решения: S. Nick

Установите свои импорты PySide6 и попробуйте.

Как один из вариантов, ваша задача может выглядеть так:

#from PySide6 import QtCore, QtGui, QtWidgets, QtSql,                 # PySide6                           
from PyQt5 import QtCore, QtGui, QtWidgets, QtSql                     # PyQt5


class Data:
    def __init__(self):
        super(Data, self).__init__()
        
        self.query = self.create_connection()

    def create_connection(self):
        self.db = QtSql.QSqlDatabase.addDatabase('QSQLITE')
        self.db.setDatabaseName('stud.db')

        if not self.db.open():
            QtWidgets.QMessageBox.critical(
                None, 
                "Cannot open database",
                "Click Cancel to exit.", 
                QtWidgets.QMessageBox.Cancel)
            return False

        query = QtSql.QSqlQuery()
        query.exec("""CREATE TABLE IF NOT EXISTS infa (
            ID integer primary key AUTOINCREMENT, 
            Name VARCHAR(20), 
            Familia VARCHAR(20), 
            Gruppa VARCHAR(20), 
            Ocenka integer)
        """)
        return query                                                   #  True

#    def add_new_transaction_query(self, name, familia, gruppa):
    def add_new_transaction_query(self, new_users):
        for name, familia, gruppa in new_users:
            self.query.exec_("INSERT INTO infa (Name, Familia, Gruppa) \
                VALUES ('{0}', '{1}', '{2}')".format(name, familia, gruppa))


class MainWindow(QtWidgets.QMainWindow):    
    def __init__(self, db):
        super().__init__()
        
        self.db = db
        
        self.createModel()
        self.initUI()

    def createModel(self):        
        self.model = QtSql.QSqlTableModel(self)        
        self.model.setTable("infa")
        self.model.setHeaderData(0, QtCore.Qt.Horizontal, "ID")
        self.model.setHeaderData(1, QtCore.Qt.Horizontal, "Name")
        self.model.setHeaderData(2, QtCore.Qt.Horizontal, "Familia")
        self.model.setHeaderData(3, QtCore.Qt.Horizontal, "Gruppa")
        self.model.setHeaderData(4, QtCore.Qt.Horizontal, "Ocenka")
        self.model.select()

    def initUI(self):
        self.view = QtWidgets.QTableView()
        self.view.setModel(self.model)
        mode = QtWidgets.QAbstractItemView.SingleSelection
        self.view.setSelectionMode(mode)
        self.setCentralWidget(self.view) 

    def closeEvent(self, e):
        if (self.db.open()):
            self.db.close()
            print("End")
            

if __name__ == "__main__":
    import sys
    
    app = QtWidgets.QApplication(sys.argv)
    
    data = Data()
    data.add_new_transaction_query([
        ['Name1', 'Familia1', 'Gruppa1'],
        ['Name2', 'Familia2', 'Gruppa1'],
        ['Name3', 'Familia3', 'Gruppa2']
    ])
    data.db.commit()
    
    w = MainWindow(data.db)
    w.resize(600, 400)
    w.show()
    
    sys.exit(app.exec())

введите сюда описание изображения

→ Ссылка