以下のようなSQLAlchemyモデルがありますが、最初は機能しませんでした(結合に問題があり、リストではなくスカラーが必要です)。付属のバージョンで「修正」しましたが、なぜそのように動作するのかよくわかりません。
最初は、これらForeignKey
のsではSizes.items
relationship()
明示的なを必要としないはずだprimaryjoin
と思っていました。それを追加すると、SAはスカラーを期待し始め、明示的にを指定する必要がありuselist=True
ました。
関係がこれらの一方または両方を自動的に検出しないのはなぜですか?
class Category(Base):
__tablename__ = 'categories'
pk = Column(String(6), primary_key=True)
class Item(Base):
__tablename__ = 'items'
pk = Column(String(6), primary_key=True)
category_pk = Column(String(6), ForeignKey('categories.pk') )
size = Column(Integer(), nullable=False)
category = relationship('Category', backref=backref('items'))
class Sizes(Base):
__tablename__ = 'sizes'
category_pk = Column(String(6), ForeignKey('categories.pk'),
ForeignKey('items.category_pk'), primary_key=True )
size = Column(Integer(), ForeignKey('items.size'), primary_key=True )
category = relationship('Category', backref=backref('sizes'))
items = relationship('Item',
uselist=True,
primaryjoin="and_(Sizes.category_pk==Item.category_pk, Sizes.size==Item.size)" )