|
|||||||
Relationships SQLAlchemy / Построение связей в SQLAlchemy
Время создания: 11.10.2017 11:24
Раздел: SQLAlchemy
Запись: xintrea/mytetra_db_mcold/master/base/1507710259qvtmwh6n83/text.html на raw.githubusercontent.com
|
|||||||
|
|||||||
Построение связей в SQLAlchemy Date Wed 04 March 2015 Tags sqlalchemy / orm Связи в sqlachemy бывают 4-х видов:
Релизация этих связей: Для указания связи OTM, создается колонка с ForeignKey в дочернем классе. При этом сама связь (relationship()) объявляется в Родителе. Для того что-бы получить по Ребенку Родителя, необходимо указать в relationship, свойство backref. class Parent(Base): __tablename__ = 'parents' id = Column(Integer, primary_key=True) child = relationship("Child", backfer='parents') class Child(Base): __tablename__ = 'childrens' id = Column(Integer, primary_key=True) parent_id = Column(Integer, ForeignKey('parents.id') Здесь построение отношения похоже на предыдущий, только ForeignKey указывается в Родителе, вместе с relationship() class Parent(Base): __tablename__ = 'parents' id = Column(Integer, primary_key=True) child_id = Column(Integer, ForeignKey('childs.id')) child = relationship("Child", backref='parents') class Child(Base): __tablename__ = 'childs' id = Column(Integer, primary_key=True) Со связью один-к-одному вообще всё просто, это та же связь один-к-многим, только в relationship добавляется еще одно свойство, которое вытягивает из другой таблицы только 1 элемент class Parent(Base): __tablename__ = 'parents' id = Column(Integer, primary_key=True) child = relationship("Child", uselist=False, backref='parents') class Child(Base): __tablename__ = 'childs' id = Column(Integer, primary_key=True) parent = Column(Integer, ForegnKey(parents.id)) Или class Parent(Base): __tablename__ = 'parents' id = Column(Integer, primary_key=True) child_id = Column(Integer, ForeignKey('childs.id')) child = relationship("Child", backref=backref("parents", uselist=False)) class Child(Base): __tablename__ = 'childs' id = Column(Integer, primary_key=True) Данная связь реализуется при помощи вспомагательной ассоциативной таблицы, которую необходимо создать до создания связанных таблиц. association_table = Table('association', Base.metadata, Column('left_id', Integer, ForeignKey('left.id')), Column('right_id', Integer, ForeignKey('right.id'))) class Parent(Base): __tablename__ = 'left' id = Column(Integer, primary_key=True) children = relationship("Child", secondary=association_table) class Child(Base): __tablename__ = 'right' id = Column(Integer, primary_key=True) стырено из официальной документации с вольным переводом оф.документация |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|