Я пытаюсь вывести данные из базы данных sqlite. Я сделал это как в примерах PyQt, но это не сработает. Кажется, что база данных открыта, но код дает ошибки, а это не так. Не могли бы вы рассказать мне, почему и как я могу это исправить?QSqlQuery :: exec: database not open, PyQt
#####################################################################
# test.py #
# ! /usr/bin/env python #
# -*- coding: utf-8 -*- #
#####################################################################
from PyQt4 import QtGui, QtCore, QtSql
from src.database import DBase
class Test(QtGui.QMainWindow):
def __init__(self):
super(Test, self).__init__()
self.tview = QtGui.QTableView()
self.setCentralWidget(self.tview)
model = QtSql.QSqlTableModel(self)
model.setTable("person")
model.setEditStrategy(QtSql.QSqlTableModel.OnManualSubmit)
model.select()
model.setHeaderData(0, QtCore.Qt.Horizontal, QtCore.QObject.trUtf8(model, "№"))
model.setHeaderData(1, QtCore.Qt.Horizontal, QtCore.QObject.trUtf8(model, "Name"))
model.setHeaderData(2, QtCore.Qt.Horizontal, QtCore.QObject.trUtf8(model, "Lastname"))
self.tview.setModel(model)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
db = DBase()
db.connection_db()
window = Test()
window.resize(800, 600)
window.show()
sys.exit(app.exec_())
#####################################################################
# database.py #
# ! /usr/bin/env python #
# -*- coding: utf-8 -*- #
from PyQt4 import QtSql, QtGui
class DBase():
def connection_db(self):
db=QtSql.QSqlDatabase.addDatabase("QSQLITE", "Base")
db.setDatabaseName("db.sqlite")
if db.open():
print 'DataBase is now opened.'
query = QtSql.QSqlQuery()
query.exec_("create table person(id int primary key, "
"firstname varchar(20), lastname varchar(20))")
query.exec_("insert into person values(101, 'Danny', 'Young')")
query.exec_("insert into person values(102, 'Christine', 'Holand')")
query.exec_("insert into person values(103, 'Lars', 'Gordon')")
query.exec_("insert into person values(104, 'Roberto', 'Robitaille')")
return True
В выходе он дает это:
C:\Python27\python.exe D:test.py
QSqlQuery::exec: database not open
QSqlQuery::exec: database not open
QSqlQuery::exec: database not open
QSqlQuery::exec: database not open
QSqlQuery::exec: database not open
DataBase is now opened.
Могу ли я задать еще один вопрос? Почему «self.tview» все еще пуст? – SaulTigh
Это то же самое - вам нужно передать экземпляр базы данных в QSqlTableModel при его создании. Взгляните на документацию для QSqlTableModel .__ init __(). Если вы используете только одно подключение к базе данных, вам может быть лучше не указывать имя соединения при добавлении базы данных. Таким образом, запросам и табличным моделям не нужно будет говорить, какое соединение использовать, они просто будут использовать стандартное (безымянное) соединение. Вам действительно нужно использовать имена соединений, если вы открываете несколько подключений или используете несколько баз данных. –