尝试从foreign_keys中删除引号并将它们制成列表。从官方文档开始
Relationship Configuration: HandlingMultiple JoinPaths
在版本0.8中进行了更改:
relationship()可以foreign_keys仅基于参数就可以解决外键目标之间的歧义;primaryjoin在这种情况下,不再需要该参数。
以下自包含的代码适用于
sqlalchemy>=0.9:
from sqlalchemy import create_engine, Column, Integer, String, ForeignKeyfrom sqlalchemy.orm import relationship, scoped_session, sessionmakerfrom sqlalchemy.ext.declarative import declarative_baseengine = create_engine(u'sqlite:///:memory:', echo=True)session = scoped_session(sessionmaker(bind=engine))base = declarative_base()#The business case here is that a company can be a stakeholder in another company.class Company(base): __tablename__ = 'company' id = Column(Integer, primary_key=True) name = Column(String(50), nullable=False)class Stakeholder(base): __tablename__ = 'stakeholder' id = Column(Integer, primary_key=True) company_id = Column(Integer, ForeignKey('company.id'), nullable=False) stakeholder_id = Column(Integer, ForeignKey('company.id'), nullable=False) company = relationship("Company", foreign_keys=[company_id]) stakeholder = relationship("Company", foreign_keys=[stakeholder_id])base.metadata.create_all(engine)# simple query testq1 = session.query(Company).all()q2 = session.query(Stakeholder).all()


