- Как использовать PostgreSQL в Python
- Что такое PostgreSQL?
- Начало работы
- Что такое Psycopg2?
- Как установить Psycopg2
- Как запрашивать PostgreSQL с помощью Python
- Как использовать функцию fetchone() :
- Как использовать fetchall() :
- Как использовать fetchmany() :
- Заключение
- Базы данных в Python: как подключить PostgreSQL и что это такое
- Установка Psycopg2
- Использование Psycopg2
- Взаимодействие Python с PostgreSQL
- Выполнение запросов
Как использовать PostgreSQL в Python
В настоящее время используется множество различных типов баз данных. Существуют централизованные базы данных, коммерческие базы данных, облачные базы данных, распределенные базы данных, базы данных для конечных пользователей, базы данных NoSQL, реляционные базы данных и многие другие.
Эта статья будет посвящена реляционной базе данных PostgreSQL и тому, как запрашивать данные из нее. Другими примерами реляционных баз данных являются MySQL, MariaDB и SQLite.
В этом руководстве вы узнаете, как установить, подключить и, наконец, запросить базу данных PostgreSQL с помощью Python.
Для начала давайте узнаем немного больше о PostgreSQL.
Что такое PostgreSQL?
Одной из самых известных реляционных баз данных с открытым исходным кодом является 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.execute(“SELECT * FROM DB_table WHERE >
Мы применяем функцию execute() и передаем в качестве ее аргумента строку запроса. После этого база данных будет запрошена.
После того, как мы успешно справились с этой задачей, чтобы получить данные из базы данных с помощью Pyscopg2, мы должны использовать одну из этих функций: fetchone() fetchall() или fetchmany() .
Как использовать функцию fetchone() :
После выполнения SQL-запроса эта функция вернет только первую строку. Это самый простой метод получения данных из базы данных.
#code print(cursor.fetchone()) #output (1, 'A-CLASS', '2018', 'Subcompact executive hatchback')
Функция 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')] [. ]
Как использовать 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')]
Поскольку мы задали аргумент 3, мы получили только три строки.
Когда мы завершим запрос к базе данных, нам нужно закрыть соединение с помощью conn.close() .
Заключение
Это было довольно просто, верно? Мы смогли выполнить все рассмотренные задачи с помощью одного скрипта Python, что не может не радовать.
Надеюсь, эта статья была полезной, и теперь вы сможете работать с PostgreSQL с помощью Python.
Для получения дополнительной информации ознакомьтесь с документацией по Psycopg2.
Базы данных в Python: как подключить PostgreSQL и что это такое
Во время разработки приложений часто нужно подключать и использовать базы данных для хранения информации. Самая распространенная база данных — PostgreSQL, поэтому мы расскажем, как работать в Python именно с ней. Для этого существует множество модулей, например:
Мы расскажем именно про модуль Psycopg2. И выбрали мы его по таким причинам:
- Распространенность — Psycopg2 использует большинство фреймворков Python
- Поддержка — Psycopg2 активно развивается и поддерживает основные версии Python
- Многопоточность — Psycopg2 позволяет нескольким потокам поддерживать одно и то же соединение
Установка Psycopg2
Для начала работы с модулем достаточно установить пакет при помощи pip:
Если в вашем проекте используется poetry, то при первоначальной настройке проекта нужно добавить psycopg2-binary в зависимости. Для добавления в уже существующий проект воспользуйтесь командой:
Использование Psycopg2
Подключение к БД:
Для подключения к существующей базе данных необходимо знать основную информацию о вашей БД. Если вы не знаете, где ее взять, то пройдите сначала наш большой курс по Основам баз данных:
- Username — имя пользователя, которое вы используете для работы с PostgreSQL
- Password — пароль, который используется пользователем
- Host Name — имя сервера или IP-адрес, на котором работает PostgreSQL
- Database Name — имя базы данных, к которой мы подключаемся.
Для подключения к базе данных мы используем метод connect() , которому в качестве аргументов передаются вышеперечисленные данные:
import psycopg2 try: # пытаемся подключиться к базе данных conn = psycopg2.connect(dbname='test', user='postgres', password='secret', host='host') except: # в случае сбоя подключения будет выведено сообщение в STDOUT print('Can`t establish connection to database')
Также подключение к базе данных может осуществляться с помощью Connection URI:
import psycopg2 try: # пытаемся подключиться к базе данных conn = psycopg2.connect('postgresql://user:password@host:port/database_name') except: # в случае сбоя подключения будет выведено сообщение в STDOUT print('Can`t establish connection to database')
Читайте также: Вышел Python 3.11.0. В два раза быстрее, c детальным описанием ошибок и кучей новых типов
Взаимодействие Python с PostgreSQL
Итак, подключение к базе данных успешно выполнено. Дальше мы будем взаимодействовать с ней через объект cursor , который можно получить через метод cursor() объекта соединения. Он помогает выполнять SQL-запросы из Python.
# получение объекта курсора cursor = conn.cursor()
С помощью cursor происходит передача запросов базе данных:
# Получаем список всех пользователей cursor.execute('SELECT * FROM users') all_users = cursor.fetchall() cursor.close() # закрываем курсор conn.close() # закрываем соединение
Для получения результата после выполнения запроса используются следующие команды:
- cursor.fetchone() — вернуть одну строку
- cursor.fetchall() — вернуть все строки
- cursor.fetchmany(size=10) — вернуть указанное количество строк
Хорошей практикой при работе с базой данных является закрытие объекта cursor и соединения с базой. Для автоматизации этого процесса удобно взаимодействовать через контекстный менеджер, используя конструкцию with :
with conn.cursor as curs: curs.execute('SELECT * FROM users') all_users = curs.fetchall()
В тот момент, когда объект cursor выходит за пределы конструкции with , происходит его закрытие и освобождение связанных с ним ресурсов.
По умолчанию результат возвращается в виде кортежа. Такое поведение возможно изменить, передав параметр cursor_factory в момент открытия объекта cursor , например, использовать NamedTupleCursor. Это вернет данные в виде именованного кортежа:
from psycopg2.extras import NamedTupleCursor # … with conn.cursor(cursor_factory=NamedTupleCursor) as curs: curs.execute('SELECT * FROM users WHERE name=%s', (name='Alfred')) alfred = curs.fetchone() alfred # (id=10, name='Alfred', age='90') # …
Выполнение запросов
Psycopg2 преобразует переменные Python в SQL значения с учетом их типа. Все стандартные типы Python адаптированы для правильного представления в SQL.
Передача параметров в SQL-запрос происходит с помощью подстановки плейсхолдеров %s и цепочки значений в качестве второго аргумента функции:
with conn.cursor() as curs: curs.execute('SELECT id, name FROM users WHERE name=%s', ('John',)) curs.fetchall() # … with conn.cursor() as curs: cusr.execute(INSERT INTO users (name, age) VALUES (%s, %s), ('John', 19)) # … conn.close()
Подстановка значений в SQL-запрос используется для того, чтобы избежать атак типа SQL Injection. Также несколько полезных советов по построению запросов:
- Плейсхолдер должен быть %s даже если тип подставляемого значения отличается от строки
- Не заключайте плейсходер в кавычки
- Если в запросе используется знак % , он должен быть указан как %%
Продолжайте учиться: На Хекслете есть несколько больших профессий, интенсивов и треков для джуниоров, мидлов и даже сеньоров: они позволят не только узнать новые технологии, но и прокачать уже существующие навыки