Форум сайта python.su
from PyQt4.QtGui import * from PyQt4.QtCore import * from PyQt4.QtSql import * class mywindow(QWidget): def __init__(self, parent = None): QWidget.__init__(self, parent) self.db = QSqlDatabase.addDatabase("QSQLITE") self.mainbox = QHBoxLayout() self.rightbox = QVBoxLayout() self.leftbox = QVBoxLayout() self.mainbox.addLayout(self.leftbox) self.mainbox.addLayout(self.rightbox) self.setLayout(self.mainbox) self.btn_create_base = QPushButton("Создать базу") self.btn_create_base.clicked.connect(self.create_base) self.leftbox.addWidget(self.btn_create_base) def create_base(self): self.db.setDatabaseName("1.db") if self.db.open(): query = QSqlQuery() query.exec_("CREATE TABLE people (" "id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT NULL, " "name VARCHAR(40) NOT NULL)") query.exec_("CREATE TABLE property (" "id INTEGER NOT NULL, " "id_n INTEGER AUTOINCREMENT UNIQUE NOT NULL, " "dvig VARCHAR(40), " "nedvig VARCHAR(40), " "FOREIGN KEY (id) REFERENCES people(id)") QMessageBox.information(None, "Сообщение", "База данных успешно создана.") else: QMessageBox.warning(None, "Ошибка", "Создать базу не удалось!\n"+self.db.lastError().text()) if __name__ == "__main__": import sys app = QApplication(sys.argv) window1 = mywindow() window1.show() sys.exit(app.exec_())
Офлайн
Ну так-то во втором запросе не хватает закрывающей скобки. А вот почему не бросается исключение не подскажу, через Qt с базами не работал.
PS: и сразу не заметил - id_n INTEGER AUTOINCREMENT - AUTOINCREMENT без PRIMARY KEY ошибка
Отредактировано PooH (Июнь 25, 2012 09:09:06)
Офлайн
PooHВ Qt exec_ возвращает True при удачном выполнении, иначе False.
А вот почему не бросается исключение не подскажу, через Qt с базами не работал.
Офлайн
Благодарю! С учётом указанных исправлений всё сработало.
А почему не выдавалось сообщений об ошибке и сам, балда, мог бы догадаться. Я ж проверку на ошибку сделал только для открытия базы. На query.exec_ ни какой проверки не поставил.
Офлайн
query = QSqlQuery() for name in ("Дядя", "Петя Петрович", "Ариадна", "Персей", "Никита Кожемяка"): try: query.exec_("INSERT INTO people (name) VALUES ('%s')" %name) except query.lastError().text() as err: print (err)
Офлайн
Pluto
В этой конструкции я сначала допустил ошибку не выведя %name за кавычки, но опять же не получил никакой ошибки! Просто данные в базу не попали и всё. И опять молчком.
Офлайн
Ну, а я что смотрю? Может я смотрю как-то не так как надо? Или через exсept его не поймать? Надо, видимо, через myvar = query.exec_(“траляля”) if myvar = False: print (query.lastError().text())? Сейчас попробую.
Офлайн
Блин, точно! Try-except ему по-барабану!
Проверять только переменной, которой присваиваем результат возвращаемый query.exec_().
Отредактировано Pluto (Июнь 25, 2012 11:27:00)
Офлайн