Установка библиотеки psycopg2
Для начала нужно установить библиотеку
psycopg2
, которая является стандартом де-факто для работы с PostgreSQL в Python.pip install psycopg2
Альтернативой является psycopg2-binary, которая устанавливает двоичный дистрибутив (особенно полезно для разработки):
pip install psycopg2-binary
Подключение к базе данных
Подключение к PostgreSQL выполняется с помощью функции connect, где указываются параметры подключения: имя базы данных, пользователь, пароль, хост и порт.
import psycopg2
# Параметры подключения
conn = psycopg2.connect(
dbname="your_db_name",
user="your_username",
password="your_password",
host="localhost", # IP-адрес или домен сервера
port="5432" # порт PostgreSQL по умолчанию
)
# Открываем курсор для выполнения SQL-запросов
cursor = conn.cursor()
После успешного подключения вы можете использовать cursor для выполнения SQL-запросов.
Выполнение SQL-запросов
1. Выполнение простого запроса
Запросы выполняются с помощью метода execute(). Например, создадим таблицу:
# SQL-запрос на создание таблицы
create_table_query = '''
CREATE TABLE IF NOT EXISTS employees (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
age INTEGER,
department VARCHAR(50)
)
'''
cursor.execute(create_table_query)
conn.commit() # Применение изменений к базе данных
print("Таблица создана")
2. Вставка данных
Для вставки данных можно использовать execute() с параметризованными запросами, чтобы избежать SQL-инъекций:
# SQL-запрос для вставки данных
insert_query = "INSERT INTO employees (name, age, department) VALUES (%s, %s, %s)"
data_to_insert = ("Alice", 30, "HR")
cursor.execute(insert_query, data_to_insert)
conn.commit()
print("Данные вставлены")
3. Вставка нескольких записей
Для вставки нескольких записей используйте executemany():
# Список данных для вставки
data = [
("Bob", 25, "Finance"),
("Charlie", 35, "IT"),
("Diana", 28, "Marketing")
]
cursor.executemany(insert_query, data)
conn.commit()
print("Несколько записей добавлены")
4. Извлечение данных
Для выборки данных используем запрос SELECT и метод fetchall() для получения всех строк:
# Запрос для выборки данных
select_query = "SELECT * FROM employees"
cursor.execute(select_query)
# Получаем все результаты
records = cursor.fetchall()
for row in records:
print(f"ID: {row[0]}, Name: {row[1]}, Age: {row[2]}, Department: {row[3]}")
Также можно использовать fetchone(), чтобы получить только одну строку, или fetchmany(n) для получения n строк.
Обработка транзакций и исключений
Используйте обработку исключений для выполнения транзакций и отката изменений, если что-то пошло не так:
try:
# Начало транзакции
cursor.execute("BEGIN")
# Вставка и другие операции
cursor.execute(insert_query, ("Eve", 29, "Legal"))
# Применяем изменения
conn.commit()
print("Транзакция успешно выполнена")
except Exception as e:
conn.rollback() # Откат изменений в случае ошибки
print("Ошибка транзакции:", e)
Закрытие соединения
После завершения работы с базой данных не забудьте закрыть курсор и соединение:
cursor.close()
conn.close()
С библиотекой psycopg2 можно легко подключаться к PostgreSQL и выполнять большинство задач работы с базой данных: создание таблиц, вставка, выборка, обновление и удаление данных.