Где можно найти хорошие примеры кода на PyQt5(Qt5) с использованием реляционных баз данных?
Можно ли где-нибудь найти примеры кода/книги, где хорошо описано использование PyQt5(Qt5) / PyQt4(Qt4) и СУБД? Лучше всего PyQt5 + Oracle, но в основном интересует структура построения приложения ( как создать логин-формы, как/где открывать/закрывать соединения, обрабатывать ошибки и т.п. ) - поэтому полезны будут примеры с любой реляционной базой данных. Google не особо помогает : получается найти только совсем простые примеры. Пишу для своих нужд , использую PyQt5 + cx_Oracle. Вроде всё работает. Но хотелось бы посмотреть, как это делать правильно.
Максим,
Я примерно так и делаю. Просто не могу найти как раз такого примера, в котором рассматривалось построение приложения от самого начала - создания логин-формы для подключения к базе и до конца - закрытия соединения. Мне важно понять, как правильно построить структуру приложения. Это бы мне сильно помогло, чтобы не придумывать то, что уже и так давно написано.
yuyu_yaya, ну логин форма это просто QWidget с с двумя QLineEdit и QPushButton, класс подключения должен иметь слот куда будут поступать эти данные, подключение на C++ выглядит так:
db = QSqlDatabase::addDatabase("QPSQL", "connection_name");
db.setHostName("localhost");
db.setDatabaseName("dbname");
db.setUserName("user");
db.setPassword("pass");
if (db.open()) {
... OK ...
}
Вместо QPSQL указываешь свой драйвер, зависит от СУБД.
Максим, Да, Qwidget с 3-мя QLineEdit и кнопкой - это один из вариантов, который мне сразу пришел в голову. Единственное, что я использую модуль сx_Oracle.Поэтому как-то так:
...
try:
self._con = cx_Oracle.connect(user,password,db)
except cx_Oracle.DatabaseError as e:
self.show_error_message("Ошибка подключения", "Ошибка базы данных: %s" % e)
...
Но, кроме этого существует ещё масса вариантов, как это всё можно реализовать. Например, использовать QStackedWidget в MainWindow. И после успешного подключения просто переключиться на следующий виджет. Можно вызвать диалоговое окно (QDialog), которое будет блокировать основное (MainWindow) до тех пор пока не произойдет подключение и т.д. И поскольку - у меня нет опыта, сложно понять какой из вариантов более предпочтительный. Ладно, наверное, правильнее более мелкие вопросы задавать с примерами кода. Так проще будет. Спасибо, что помогаете.