PRO

Как подключить базу данных к Python-приложению (psycopg2, SQLAlchemy)?

В Python к базе данных можно подключаться напрямую через драйвер (например, psycopg2 для PostgreSQL) или через библиотеку вроде SQLAlchemy, которая использует драйверы внутри и даёт более удобный интерфейс (в том числе ORM) для подключения и работы с БД.
Подробный ответ

psycopg2 (низкоуровневый драйвер для PostgreSQL)

psycopg2 — популярный драйвер для работы с базой PostgreSQL из Python. Схема работы:

  • создаём соединение (connection) с БД вызовом psycopg2.connect(...) — указываем host, dbname, user, password;

  • получаем курсор (cursor) через conn.cursor() и выполняем SQL‑запросы методом cursor.execute(sql, params);

  • читаем результаты через fetchone(), fetchall(), фиксируем изменения conn.commit() или откатываем conn.rollback(), затем закрываем курсор и соединение.

import psycopg2

conn = psycopg2.connect(
   host="localhost",
   dbname="mydb",
   user="user",
   password="secret",
)
cur = conn.cursor()
cur.execute("SELECT id, name FROM users WHERE active = TRUE")
rows = cur.fetchall()
for row in rows:
   print(row)
conn.commit()
cur.close()
conn.close()

Такой подход даёт полный контроль над SQL — вы сами пишете запросы SELECT, INSERT, UPDATE, DELETE и обрабатываете результаты.

SQLAlchemy (движок + ORM)

SQLAlchemy — это библиотека, которая умеет:

  • создавать «движок» (engine) подключения к разным СУБД через функцию create_engine();

  • давать единый интерфейс для выполнения SQL‑запросов (через text() или expression language);

  • поверх этого предоставляет ORM: таблицы описываются как классы, а строки — как объекты.

from sqlalchemy import create_engine, text

engine = create_engine("postgresql+psycopg2://user:secret@localhost/mydb")

with engine.connect() as conn:
   result = conn.execute(text("SELECT id, name FROM users WHERE active = true"))
   for row in result:
       print(row.id, row.name)

ORM‑часть SQLAlchemy позволяет описывать модели примерно так:

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column

class Base(DeclarativeBase):
   pass

class User(Base):
   __tablename__ = "users"
   id: Mapped[int] = mapped_column(primary_key=True)
   name: Mapped[str]

А запросы к БД писать уже на уровне Python‑объектов, а не сырых строк SQL.

Как ответить на собеседовании

Подключить БД к Python можно напрямую через драйвер, например psycopg2 для PostgreSQL: создать соединение, курсор, выполнить SELECT/INSERT/UPDATE/DELETE и сделать COMMIT. Второй вариант — использовать SQLAlchemy: она создаёт engine поверх драйвера и даёт более удобный интерфейс, в том числе ORM, где таблицы — это классы, а строки — объекты.

Оцени свой прогресс

Честно оцени своё понимание этого вопроса, чтобы мы могли построить твой учебный трек максимально эффективно.
Читать в блоге