На данном этапе своего становления в разработке SQLAlchemy мне еще кажется излишним инструментарием. Ведь в моих небольших приложениях мне пока было проще писать все запросы к базам на чистом SQL, упаковывать их в отдельные методы какого-нибудь класса, и всё. Минимум строк кода, всё прекрасно работает. Но от коллег, которые трудились над чем-то грандиозным, я слышал однозначное утверждение, что SQLAlchemy — это база, это понимать надо. Поэтому для себя, а может и не только, я решил написать небольшую шпаргалку с основными понятиями SQLAlchemy, разложенными по полочкам.
-
SQLAlchemy — библиотека Python для работы с базами данных, поддерживающая как ORM, так и прямую работу с SQL. Я хорошо знаком с ОРМ по прошлой работе, однако в настоящем контексте эта аббревиатура имеет иное значение, поэтому будет пункт 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) # другие поля # ...
Основные советы
-
Используйте
Base.metadata.create_all(engine)для создания всех таблиц, определенных в моделях. -
Всегда закрывайте сессию (
session.close()) после завершения работы с базой данных. -
Для отладки установите
echo=Trueвcreate_engine, чтобы видеть все SQL-запросы, выполняемые SQLAlchemy.
Эта маленькая шпаргалка охватывает лишь самые основные операции и шаги для работы с SQLAlchemy. Для более продвинутых возможностей придется ознакомиться с документацией или полноценными статьями на эту тему.

ссылка на оригинал статьи https://habr.com/ru/articles/819219/
Добавить комментарий