На данном этапе своего становления в разработке SQLAlchemy мне еще кажется излишним инструментарием. Ведь в моих небольших приложениях мне пока было проще писать все запросы к базам на чистом SQL, упаковывать их в отдельные методы какого-нибудь класса, и всё. Минимум строк кода, всё прекрасно работает. Но от коллег, которые трудились над чем-то грандиозным, я слышал однозначное утверждение, что SQLAlchemy - это база, это понимать надо. Поэтому для себя, а может и не только, я решил написать небольшую шпаргалку с основными понятиями SQLAlchemy, разложенными по полочкам.

  1. SQLAlchemy - библиотека Python для работы с базами данных, поддерживающая как ORM, так и прямую работу с SQL. Я хорошо знаком с ОРМ по прошлой работе, однако в настоящем контексте эта аббревиатура имеет иное значение, поэтому будет пункт 2.

  2. ORM (Object-Relational Mapping) - технология, позволяющая работать с базой данных как с объектами Python.

Далее без лишних слов, чтобы не превратить шпаргалку в статью.

Установка библиотеки

pip install sqlalchemy

Настройка и создание базы данных

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

# Создание движка (engine)
engine = create_engine('sqlite:///example.db', echo=True)

# Базовый класс для декларативных классов
Base = declarative_base()

# Создание сессии
Session = sessionmaker(bind=engine)
session = Session()

Определение модели

from sqlalchemy import Column, Integer, String

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    age = Column(Integer)

# Создание таблиц в базе данных
Base.metadata.create_all(engine)

CRUD операции

Создание (Create)

new_user = User(name='John Doe', age=30)
session.add(new_user)
session.commit()

Чтение (Read)

# Получение всех пользователей
users = session.query(User).all()
for user in users:
    print(user.name, user.age)

# Получение одного пользователя
user = session.query(User).filter_by(name='John Doe').first()
print(user.name, user.age)

Обновление (Update)

user = session.query(User).filter_by(name='John Doe').first()
user.age = 31
session.commit()

Удаление (Delete)

user = session.query(User).filter_by(name='John Doe').first()
session.delete(user)
session.commit()

Фильтрация и сортировка

Фильтрация

# Пользователи старше 25 лет
users = session.query(User).filter(User.age > 25).all()

Сортировка

# Сортировка пользователей по возрасту
users = session.query(User).order_by(User.age).all()

Завершение работы сессии

session.close()

Шаблон для создания новых моделей

class ModelName(Base):
    __tablename__ = 'modelname'
    id = Column(Integer, primary_key=True)
    # другие поля
    # ...

Основные советы

  1. Используйте Base.metadata.create_all(engine) для создания всех таблиц, определенных в моделях.

  2. Всегда закрывайте сессию (session.close()) после завершения работы с базой данных.

  3. Для отладки установите echo=True в create_engine, чтобы видеть все SQL-запросы, выполняемые SQLAlchemy.

Эта маленькая шпаргалка охватывает лишь самые основные операции и шаги для работы с SQLAlchemy. Для более продвинутых возможностей придется ознакомиться с документацией или полноценными статьями на эту тему.

Комментарии (11)