Как вы можете видеть в руководстве , настройка отношения один ко многим действительно проста:
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String(50))
addresses = relation("Address", backref="user")
class Address(Base):
__tablename__ = 'addresses'
id = Column(Integer, primary_key=True)
email = Column(String(50))
user_id = Column(Integer, ForeignKey('users.id'))
Отношения ко многим не намного сложнее:
Нет ничего особенного во многих для многих с декларативным. Вторичный аргумент дляlation () по-прежнему требует объект Table, а не декларативный класс. Таблица должна совместно использовать тот же объект MetaData, который используется декларативной базой:
keywords = Table('keywords', Base.metadata,
Column('author_id', Integer, ForeignKey('authors.id')),
Column('keyword_id', Integer, ForeignKey('keywords.id'))
)
class Author(Base):
__tablename__ = 'authors'
id = Column(Integer, primary_key=True)
keywords = relation("Keyword", secondary=keywords)
Обычно вы должны не отображать класс, а также указывать его таблицу в отношении "многие ко многим", поскольку ORM может выдавать дубликаты операторов INSERT и DELETE.
В любом случае, то, что вы, кажется, делаете, может быть лучше подано с наследованием . Конечно, могут быть сложные табличные отношения, которые будут патологическим случаем для декларативного способа, но, похоже, это не один из них.
Еще одна вещь, комментарии к коду должны указывать, что делает следующий код и почему, а не как он это делает. Наличие комментария # Define the User class
почти похоже на строку кода с текстом a = 1 # assing value 1 to variable "a"
.