Как использовать PostgreSQL в Python

В настоящее время используется множество различных типов баз данных. Существуют централизованные базы данных, коммерческие базы данных, облачные базы данных, распределенные базы данных, базы данных для конечных пользователей, базы данных NoSQL, реляционные базы данных и многие другие.

Эта статья будет посвящена реляционной базе данных PostgreSQL и тому, как запрашивать данные из нее. Другими примерами реляционных баз данных являются MySQL, MariaDB и SQLite.

В этом руководстве вы узнаете, как установить, подключить и, наконец, запросить базу данных PostgreSQL с помощью Python.

Для начала давайте узнаем немного больше о PostgreSQL.

Что такое PostgreSQL?

Скачивайте книги ТОЛЬКО на русском языке у нас в телеграм канале: PythonBooksRU

Одной из самых известных реляционных баз данных с открытым исходным кодом является PostgreSQL. Она применяется разработчиками и предприятиями всех размеров по всему миру.

Популярность PostgreSQL в мире постоянно растет: на данный момент она занимает четвертое место в рейтинге DB-Engines. Это не должно удивлять, учитывая, что многие веб- и мобильные приложения, а также аналитические инструменты используют базы данных PostgreSQL.

PostgreSQL также имеет надежную экосистему с огромным выбором дополнений и расширений, которые хорошо взаимодействуют с основной базой данных. По этим причинам PostgreSQL является идеальным вариантом, если вы хотите создать свое собственное решение для базы данных или вам нужна транзакционная или аналитическая база данных.

Теперь, когда вы знаете, что такое PostgreSQL, давайте обсудим, как подключиться к базе данных с помощью Python.

Начало работы

Для подключения к базе данных PostgreSQL из нашего скрипта на Python мы должны использовать библиотеку-коннектор. В Python мы можем выбрать одну из множества альтернатив, но Psycopg2 является наиболее известной и широко используемой.

Существуют альтернативные библиотеки, полностью собранные на Python, такие как pg8000 и py-postgresql, но здесь мы будем использовать Psycopg2.

Что такое Psycopg2?

Библиотека Psycopg2 использует язык программирования C в качестве оболочки вокруг библиотеки libpq PostgreSQL для поддержки стандартов Python  DB API 2.0. Реализация на языке C делает Psycopg2 невероятно быстрым и эффективным.

С помощью SQL-запроса мы можем использовать Psycopg2 для получения одной или нескольких строк из базы данных. С помощью этой библиотеки мы также можем вносить данные в базу данных, используя различные методы одиночной или пакетной вставки.

Библиотека похожа на SQL (язык структурированных запросов) и способна выполнить все операции, на которые способен последний. Она поддерживает Unicode и Python 3, а также обеспечивает безопасность потоков (одно и то же соединение используется несколькими потоками).

Библиотека создана для выполнения многопоточных программ, которые часто создают и удаляют множество курсоров и выполняют множество одновременных операций INSERTS или UPDATES. Возможности Psycopg2 включают работу с курсорами на стороне клиента и на стороне сервера, асинхронной связью и уведомлениями.

Как установить Psycopg2

Чтобы использовать Psycopg2, мы должны установить его через терминал или командную строку с помощью pip.

#installation

pip install psycopg2
pip3 install psycopg2

Если мы также решим установить библиотеку-коннектор в виртуальной среде, это можно сделать с помощью такого кода:

virtualenv env && source env/bin/activate
pip install psycopg2-binary

Библиотека Psycopg2 и все ее зависимости будут установлены в нашу виртуальную среду Python.

Мы установили наш коннектор и теперь можем начать вводить запросы.

Как запрашивать PostgreSQL с помощью Python

Сначала вам нужно будет создать новый файл и как-либо его назвать, после чего открыть в IDE.

Первое, что нужно сделать, это импортировать библиотеку. Мы будем использовать два объекта Psycogp2:

  • Объект соединения: Соединение с экземпляром базы данных PostgreSQL управляется объектом соединения. Он инкапсулирует сессию базы данных, созданную с помощью функции connect().
  • Объект курсора: Объект курсора позволяет скриптам Python выполнять команды PostgreSQL внутри сеанса базы данных. Соединение генерирует курсоры, а затем метод cursor() навсегда привязывает их к соединению. Все команды выполняются в рамках сессии базы данных с закрытым соединением.
import psycopg2

conn = psycopg2.connect(database="db_name",
                        host="db_host",
                        user="db_user",
                        password="db_pass",
                        port="db_port")

Давайте вкратце рассмотрим аргументы, которые мы должны указать, чтобы иметь возможность подключиться к базе данных..

  • database: имя базы данных, к которой мы хотим получить доступ или подключиться. Обратите внимание, что мы можем подключиться только к одной базе данных с помощью одного объекта подключения.
  • host: IP-адрес или URL сервера базы данных.
  • user: как следует из названия, это имя пользователя PostgreSQL.
  • password: это пароль, который соответствует пользователю PostgreSQL.
  • port: номер порта сервера PostgreSQL на localhost – обычно это 5432.

Если учетные данные базы данных были введены правильно, мы получим объект подключения к базе данных, который можно использовать для создания объекта курсора. Мы можем выполнять любые запросы в базу данных и получать данные с помощью объекта курсора.

cursor = conn.cursor()

объект курсора

Давайте напишем простой запрос:

cursor.execute(“SELECT * FROM DB_table WHERE id = 1”)

Мы применяем функцию execute() и передаем в качестве ее аргумента строку запроса. После этого база данных будет запрошена.

После того, как мы успешно справились с этой задачей, чтобы получить данные из базы данных с помощью Pyscopg2, мы должны использовать одну из этих функций: fetchone() fetchall() или fetchmany().

Как использовать функцию fetchone():

После выполнения SQL-запроса эта функция вернет только первую строку. Это самый простой метод получения данных из базы данных.

#code
print(cursor.fetchone())

#output
(1, 'A-CLASS', '2018', 'Subcompact executive hatchback')

пример fetchone()

Функция fetchone() возвращает одну строку в виде кортежа, в котором информация расположена в порядке, заданном столбцами запроса.

При составлении запроса очень важно точно указать порядок столбцов, чтобы различать, к чему относятся данные в кортеже.

Как использовать fetchall():

Функция fetchall() работает так же, как и fetchone(), за исключением того, что она возвращает не один ряд, а все. Поэтому, если нам нужно 20-200 строк или больше, мы используем её.

#code
print(cursor.fetchall())

#output
[(1, 'A-CLASS', '2018', 'Subcompact executive hatchback'),
 (2, 'C-CLASS', '2021', 'D-segment/compact executive sedan'),
 (3, 'CLA', '2019', 'Subcompact executive fastback sedan'),
 (4, 'CLS', '2018', 'E-segment/executive fastback sedan'),
 (5, 'E-CLASS', '2017', 'E-segment/executive sedan'),
 (6, 'EQE', '2022', 'All-electric E-segment fastback'),
 (7, 'EQS', '2021', 'All-electric full-size luxury liftback'),
 (8, 'S-CLASS', '2020', 'F-segment/full-size luxury sedan.'),
 (9, 'G-CLASS', '2018', 'Mid-size luxury SUV, known as the G-Wagen'),
 (10, 'GLE', '2019', 'Mid-size luxury crossover SUV')]
[...]

пример fetchall()

Как использовать fetchmany():

Функция fetchmany() позволяет получить некоторое количество записей из базы данных и дает дополнительный контроль над точным количеством строк, которые мы получаем.

#code
print(cursor.fetchmany(size=3))

#output
[(1, 'A-CLASS', '2018', 'Subcompact executive hatchback'),
 (2, 'C-CLASS', '2021', 'D-segment/compact executive sedan'),
 (3, 'CLA', '2019', 'Subcompact executive fastback sedan')]

пример fetchmany()

Поскольку мы задали аргумент 3, мы получили только три строки.

Когда мы завершим запрос к базе данных, нам нужно закрыть соединение с помощью conn.close().

Заключение

Это было довольно просто, верно? Мы смогли выполнить все рассмотренные задачи с помощью одного скрипта Python, что не может не радовать.

Надеюсь, эта статья была полезной, и теперь вы сможете работать с PostgreSQL с помощью Python.

Для получения дополнительной информации ознакомьтесь с документацией по Psycopg2.

Перевод статьи Shittu Olumide «How to Use PostgreSQL in Python».