Sobes.tech
Back to questions
Junior — Middle
60

Объясните принцип декларативного определения связей и таблиц в SQLAlchemy.

Answer from AI

sobes.tech AI

В SQLAlchemy декларативный стиль позволяет описывать таблицы и связи между ними с помощью классов Python, которые наследуются от базового класса declarative_base(). Каждому классу соответствует таблица в базе данных, а атрибуты класса — столбцы таблицы.

Связи между таблицами определяются через специальные свойства, например, relationship(), которые устанавливают связи между объектами классов, а также через внешние ключи (ForeignKey). Это позволяет работать с базой данных на уровне объектов, а SQLAlchemy автоматически генерирует нужные SQL-запросы.

Пример:

from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy.orm import declarative_base, relationship

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    addresses = relationship('Address', back_populates='user')

class Address(Base):
    __tablename__ = 'addresses'
    id = Column(Integer, primary_key=True)
    email = Column(String)
    user_id = Column(Integer, ForeignKey('users.id'))
    user = relationship('User', back_populates='addresses')

Здесь User и Address — таблицы, а relationship устанавливает двунаправленную связь между ними.