Python 如何从SQLAlchemy中的现有关系创建关系?

Python 如何从SQLAlchemy中的现有关系创建关系?,python,sqlalchemy,Python,Sqlalchemy,在sqlalchemy中,我有点被关系中的关系所困扰。我有一个这样的模型: engine = create_engine('sqlite:///tvdb.db', echo=True) Base = declarative_base(bind=engine) episodes_writers = Table('episodes_writers_assoc', Base.metadata, Column('episode_id', Integer, ForeignKey('episode

在sqlalchemy中,我有点被关系中的关系所困扰。我有一个这样的模型:

engine = create_engine('sqlite:///tvdb.db', echo=True)
Base = declarative_base(bind=engine)

episodes_writers = Table('episodes_writers_assoc', Base.metadata,
    Column('episode_id', Integer, ForeignKey('episodes.id')),
    Column('writer_id', Integer, ForeignKey('writers.id')),
    Column('series_id', Integer, ForeignKey('episodes.series_id'))

class Show(Base):
    __tablename__ = 'shows'

    id = Column(Integer, primary_key = True)
    episodes = relationship('Episode', backref = 'shows')

class Episode(Base):
    __tablename__ = 'episodes'

    id = Column(Integer, primary_key = True)
    series_id = Column(Integer, ForeignKey('shows.id'))
    writers = relationship('Writer', secondary = 'episodes_writers',
                           backref = 'episodes')

class Writer(Base):
    __tablename__ = 'writers'

    id = Column(Integer, primary_key = True)
    name = Column(Unicode)
节目和剧集之间是一对多的关系,剧集和编剧之间是多对多的关系,但我现在想在节目和编剧之间建立一种多对多的关系,基于编剧与一个剧集相关的事实。我试图向assoc表中添加另一列,但这导致以下异常:

sqlalchemy.exc.ArgumentError: Could not determine join condition between parent/child tables on relationship Episode.writers.  Specify a 'primaryjoin' expression.  If 'secondary' is present, 'secondaryjoin' is needed as well.

所以我的关系声明显然有问题。如何创建正确的PrimaryJoin以实现我在此处尝试的操作?

错误消息中建议修复。无论如何,您不需要一个列来对您的模式进行非规范化;writer.shows可以是associationproxy。

感谢您的帮助,我已尝试在writer中设置association\u proxy:
shows=association\u proxy('剧集','节目')
,这将返回与作者关联的每一集的节目列表,但我想让这部剧能让我把与作者有关的独特的剧集还给你…@Ben,也许是吧?