Найти тему
programmer's notes (python and more)

Программирование на языке python. Пример клиента к серверу PostgreSQL с использованием библиотеки PyQt5

Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.

Консольный клиента на Python с использованием библиотеки PyQt5

Пример простого клиента я уже приводил

Но там мы использовали не слишком популярную библиотеку psycopg2. А сегодня PyQt5, где есть всё,...ну почти.

Действительно в библиотеке PyQt5 есть модуль QtSql, с помощью которого можно взаимодействовать с базой данных. При чём с множеством разных СУБД. Ниже программа (рисунок 1) выводит данные из базы (имена студентов и и факультеты, где они учатся) и позволяет добавить в базу студента, указав его ФИО и номер (идентификатор) факультета (см. рисунок 2).

Рисунок 1. Консольная программа просмотра и добавления данных. Текст программы см. ниже по ссылке
Рисунок 1. Консольная программа просмотра и добавления данных. Текст программы см. ниже по ссылке
primer335.py

Комментарии к программе

  • Импортируем из модуля 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().
Рисунок 2. Работа программы на рисунке 1
Рисунок 2. Работа программы на рисунке 1

Пока всё

Хорошего программирования. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.

- Сервер ответил? - Да, но...как-то грубовато
- Сервер ответил? - Да, но...как-то грубовато