0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p><strong>Рассказываем, как работать с PostgreSQL в Python и почему для этого мы используем именно модуль Psycopg2.</strong></p>
1
<p><strong>Рассказываем, как работать с PostgreSQL в Python и почему для этого мы используем именно модуль Psycopg2.</strong></p>
2
<p>Во время разработки приложений часто нужно подключать и использовать базы данных для хранения информации. Самая распространенная база данных - PostgreSQL, поэтому мы расскажем, как работать в Python именно с ней. Для этого существует множество модулей, например:</p>
2
<p>Во время разработки приложений часто нужно подключать и использовать базы данных для хранения информации. Самая распространенная база данных - PostgreSQL, поэтому мы расскажем, как работать в Python именно с ней. Для этого существует множество модулей, например:</p>
3
<ul><li><a>Psycopg2</a></li>
3
<ul><li><a>Psycopg2</a></li>
4
<li><a>py-postgresql</a></li>
4
<li><a>py-postgresql</a></li>
5
<li><a>pg8000</a></li>
5
<li><a>pg8000</a></li>
6
</ul><p>Мы расскажем именно про модуль Psycopg2. И выбрали мы его по таким причинам:</p>
6
</ul><p>Мы расскажем именно про модуль Psycopg2. И выбрали мы его по таким причинам:</p>
7
<ul><li><strong>Распространенность</strong>- Psycopg2 использует большинство фреймворков Python</li>
7
<ul><li><strong>Распространенность</strong>- Psycopg2 использует большинство фреймворков Python</li>
8
<li><strong>Поддержка</strong>- Psycopg2 активно развивается и поддерживает основные версии Python</li>
8
<li><strong>Поддержка</strong>- Psycopg2 активно развивается и поддерживает основные версии Python</li>
9
<li><strong>Многопоточность</strong>- Psycopg2 позволяет нескольким потокам поддерживать одно и то же соединение</li>
9
<li><strong>Многопоточность</strong>- Psycopg2 позволяет нескольким потокам поддерживать одно и то же соединение</li>
10
</ul><h2>Содержание</h2>
10
</ul><h2>Содержание</h2>
11
<ul><li><a>Установка Psycopg2</a></li>
11
<ul><li><a>Установка Psycopg2</a></li>
12
<li><a>Использование Psycopg2</a></li>
12
<li><a>Использование Psycopg2</a></li>
13
<li><a>Взаимодействие Python с PostgreSQL</a></li>
13
<li><a>Взаимодействие Python с PostgreSQL</a></li>
14
<li><a>Выполнение запросов</a></li>
14
<li><a>Выполнение запросов</a></li>
15
</ul><h2>Установка Psycopg2</h2>
15
</ul><h2>Установка Psycopg2</h2>
16
<p>Для начала работы с модулем достаточно установить пакет при помощи pip:</p>
16
<p>Для начала работы с модулем достаточно установить пакет при помощи pip:</p>
17
<p>Если в вашем проекте используется poetry, то при первоначальной настройке проекта нужно добавить psycopg2-binary в зависимости. Для добавления в уже существующий проект воспользуйтесь командой:</p>
17
<p>Если в вашем проекте используется poetry, то при первоначальной настройке проекта нужно добавить psycopg2-binary в зависимости. Для добавления в уже существующий проект воспользуйтесь командой:</p>
18
<h2>Использование Psycopg2</h2>
18
<h2>Использование Psycopg2</h2>
19
<p><strong>Подключение к БД:</strong></p>
19
<p><strong>Подключение к БД:</strong></p>
20
<p>Для подключения к существующей базе данных необходимо знать основную информацию о вашей БД. Если вы не знаете, где ее взять, то пройдите сначала наш большой курс по<a>Основам баз данных</a>:</p>
20
<p>Для подключения к существующей базе данных необходимо знать основную информацию о вашей БД. Если вы не знаете, где ее взять, то пройдите сначала наш большой курс по<a>Основам баз данных</a>:</p>
21
<ul><li>Username - имя пользователя, которое вы используете для работы с PostgreSQL</li>
21
<ul><li>Username - имя пользователя, которое вы используете для работы с PostgreSQL</li>
22
<li>Password - пароль, который используется пользователем</li>
22
<li>Password - пароль, который используется пользователем</li>
23
<li>Host Name - имя сервера или IP-адрес, на котором работает PostgreSQL</li>
23
<li>Host Name - имя сервера или IP-адрес, на котором работает PostgreSQL</li>
24
<li>Database Name - имя базы данных, к которой мы подключаемся.</li>
24
<li>Database Name - имя базы данных, к которой мы подключаемся.</li>
25
</ul><p>Для подключения к базе данных мы используем метод connect(), которому в качестве аргументов передаются вышеперечисленные данные:</p>
25
</ul><p>Для подключения к базе данных мы используем метод connect(), которому в качестве аргументов передаются вышеперечисленные данные:</p>
26
<p>Также подключение к базе данных может осуществляться с помощью<a>Connection URI</a>:</p>
26
<p>Также подключение к базе данных может осуществляться с помощью<a>Connection URI</a>:</p>
27
<blockquote><h3>Читайте также:</h3>
27
<blockquote><h3>Читайте также:</h3>
28
<p>Вышел Python 3.11.0. В два раза быстрее, c детальным описанием ошибок и<a>кучей новых типов</a></p>
28
<p>Вышел Python 3.11.0. В два раза быстрее, c детальным описанием ошибок и<a>кучей новых типов</a></p>
29
</blockquote><h2>Взаимодействие Python с PostgreSQL</h2>
29
</blockquote><h2>Взаимодействие Python с PostgreSQL</h2>
30
<p>Итак, подключение к базе данных успешно выполнено. Дальше мы будем взаимодействовать с ней через объект cursor, который можно получить через метод cursor() объекта соединения. Он помогает выполнять SQL-запросы из Python.</p>
30
<p>Итак, подключение к базе данных успешно выполнено. Дальше мы будем взаимодействовать с ней через объект cursor, который можно получить через метод cursor() объекта соединения. Он помогает выполнять SQL-запросы из Python.</p>
31
<p>С помощью cursor происходит передача запросов базе данных:</p>
31
<p>С помощью cursor происходит передача запросов базе данных:</p>
32
<p>Для получения результата после выполнения запроса используются следующие команды:</p>
32
<p>Для получения результата после выполнения запроса используются следующие команды:</p>
33
<ul><li>cursor.fetchone() - вернуть одну строку</li>
33
<ul><li>cursor.fetchone() - вернуть одну строку</li>
34
<li>cursor.fetchall() - вернуть все строки</li>
34
<li>cursor.fetchall() - вернуть все строки</li>
35
<li>cursor.fetchmany(size=10) - вернуть указанное количество строк</li>
35
<li>cursor.fetchmany(size=10) - вернуть указанное количество строк</li>
36
</ul><p>Хорошей практикой при работе с базой данных является закрытие объекта cursor и соединения с базой. Для автоматизации этого процесса удобно взаимодействовать через<a>контекстный менеджер</a>, используя конструкцию with :</p>
36
</ul><p>Хорошей практикой при работе с базой данных является закрытие объекта cursor и соединения с базой. Для автоматизации этого процесса удобно взаимодействовать через<a>контекстный менеджер</a>, используя конструкцию with :</p>
37
<p>В тот момент, когда объект cursor выходит за пределы конструкции with, происходит его закрытие и освобождение связанных с ним ресурсов.</p>
37
<p>В тот момент, когда объект cursor выходит за пределы конструкции with, происходит его закрытие и освобождение связанных с ним ресурсов.</p>
38
<p>По умолчанию результат возвращается в виде кортежа. Такое поведение возможно изменить, передав<a>параметр</a>cursor_factory в момент открытия объекта cursor, например, использовать NamedTupleCursor. Это вернет данные в виде именованного кортежа:</p>
38
<p>По умолчанию результат возвращается в виде кортежа. Такое поведение возможно изменить, передав<a>параметр</a>cursor_factory в момент открытия объекта cursor, например, использовать NamedTupleCursor. Это вернет данные в виде именованного кортежа:</p>
39
<h2>Выполнение запросов</h2>
39
<h2>Выполнение запросов</h2>
40
<p>Psycopg2 преобразует переменные Python в SQL значения с учетом их типа. Все стандартные типы Python<a>адаптированы</a>для правильного представления в SQL.</p>
40
<p>Psycopg2 преобразует переменные Python в SQL значения с учетом их типа. Все стандартные типы Python<a>адаптированы</a>для правильного представления в SQL.</p>
41
<p>Передача параметров в SQL-запрос происходит с помощью<a>подстановки плейсхолдеров</a>%s и цепочки значений в качестве второго аргумента функции:</p>
41
<p>Передача параметров в SQL-запрос происходит с помощью<a>подстановки плейсхолдеров</a>%s и цепочки значений в качестве второго аргумента функции:</p>
42
<p>Подстановка значений в SQL-запрос используется для того, чтобы избежать атак типа<a>SQL Injection.</a>Также несколько полезных советов по построению запросов:</p>
42
<p>Подстановка значений в SQL-запрос используется для того, чтобы избежать атак типа<a>SQL Injection.</a>Также несколько полезных советов по построению запросов:</p>
43
<ul><li>Плейсхолдер должен быть %s даже если тип подставляемого значения отличается от строки</li>
43
<ul><li>Плейсхолдер должен быть %s даже если тип подставляемого значения отличается от строки</li>
44
<li>Не заключайте плейсходер в кавычки</li>
44
<li>Не заключайте плейсходер в кавычки</li>
45
<li>Если в запросе используется знак %, он должен быть указан как %%</li>
45
<li>Если в запросе используется знак %, он должен быть указан как %%</li>
46
</ul>
46
</ul>