Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.
Консольный клиента на Python с использованием библиотеки PyQt5
Пример простого клиента я уже приводил
Но там мы использовали не слишком популярную библиотеку psycopg2. А сегодня PyQt5, где есть всё,...ну почти.
Действительно в библиотеке PyQt5 есть модуль QtSql, с помощью которого можно взаимодействовать с базой данных. При чём с множеством разных СУБД. Ниже программа (рисунок 1) выводит данные из базы (имена студентов и и факультеты, где они учатся) и позволяет добавить в базу студента, указав его ФИО и номер (идентификатор) факультета (см. рисунок 2).
Комментарии к программе
- Импортируем из модуля QtSql класс QSqlDatabase (управление соединением с базой данных) и QSqlQuery (управление запросами);
- QSqlDatabase.addDatabase('драйвер') — создать объект - соединение с указанием драйвера поддержки СУБД. Я указываю специализированный драйвер "QPSQL" для PostgreSQL. Возможно понадобиться его доустановить. У меня на Alt Linus это apt-get install qt5-sql-postgresql. Список драйверов: "QDB2" — IBM Db2, "QIBASE" — Borland InterBase, "QMYSQL"/"MARIADB" — MySQL или MariaDB, "QOCI" — Oracle Call Interface, "QODBC" — универсальный ODBC-драйвер, "QPSQL" — PostgreSQL, "QSQLITE2" — SQLite 2, "QSQLITE" — SQLite 3, "QTDS" — Sybase Adaptive Server;
- Далее набор методов: setHostName('192.168.0.30') , setUserName('postgres'), setPassword('123'), setDatabaseName('new') — указываем ip-адрес компьютера, где расположен PostgreSQL, имя пользователя, пароль, имя базы данных, номер порта берётся по-умолчанию 5432, но можно задать setPort();
- Далее нужно установить соединение с помощью метода open(). Метод возвратит True, если соединение установлено, теперь можно выполнять команды на стороне PostgreSQL;
- Для выполнения запросов нужно создать объект-запрос: QSqlQuery(), указав в качестве соединения объект-соединение.
- После запросы выполняются методом exec_(), обратим внимание, что для формирования запросов весьма удобно использовать f-строки;
- В результате запроса объект QSqlQuery() получает результат, если это был запрос select;
- Проход по результату запроса (курсору) осуществляется методом QSqlQuery().next(), доступ к полям текущей строки можно получить через метод vlaue и номер поля, номер поля по его названию: QSqlQuery().record().indexOf('имя');
- Для передвижения по курсору можно также использовать методы previous(), first(), last(), seek();
- Для выполнения других команд sql используем ту же схему, только в этом случае нам не нужен курсор;
- Мы не использовали обработку ошибок, но в случае запросов можно использовать метод lastError().
Пока всё
Хорошего программирования. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.