Не видит таблицу в базе данных 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())