HTML Diff
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>