与同一父列中具有2个ForeinKeys的孩子的SQLAlchemy关系

时间:2018-08-22 21:30:17

标签: python python-3.x sqlalchemy

我有一个User模型和一个Conversation模型

class Conversation(Base):
    __tablename__ = 'conversations'
    id = Column(Integer, primary_key=True)
    user1 = Column(Integer, ForeignKey('users.id'), unique=False, nullable=False)
    user2 = Column(Integer, ForeignKey('users.id'), unique=False, nullable=False)
    date = Column(DateTime, unique=False, nullable=False, default=dt.utcnow)

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    userName = Column(String, unique=False, nullable=True)

我正在尝试向用户模型添加relationship(),该模型应返回选择了Conversation.user1Conversation.user2的所有对话

我尝试过:

User

当我尝试获取conversations = relationship('Conversation', backref="Users") 时会导致此错误:

  

AmbiguousForeignKeysError:无法确定之间的连接条件   关系User.conversations的父/子表-有   链接表的多个外键路径。指定   'foreign_keys'参数,提供这些列的列表,其中   应被视为包含对父级的外键引用   桌子。

我意识到我必须指定列。

所以我尝试了:

User

conversations = relationship(Conversation, foreign_keys=[Conversation.user1, Conversation.user2], backref="Users")

再次出现同样的错误!

之后,我尝试:

conversations = relationship(Conversation, foreign_keys='[Conversation.user1, Conversation.user2]', backref="Users")

在提交我的conversations = relationship(Conversation, foreign_keys=Conversation.user1 or Conversation.user2, backref="Users") 对象时返回了以下错误:

  

RecursionError:超过最大递归深度

再次尝试使用此功能

Conversation

在获取conversations = relationship(Conversation, foreign_keys=['Conversation.user1', 'Conversation.user2'], backref="Users") 对象时,它给了我这个错误:

  

ArgumentError:参数应使用基于列的表达式对象   'foreign_keys';得到:“ Conversation.user1”,输入类“ str”

我也尝试通过使用User进行定义来只获得一列,但它却给了我同样的foreign_keys

我知道我可以通过向RecursionError类添加方法来做到这一点,例如:

User

但是对我来说,使用def conversations(self): return session.query(Conversation).filter(Conversation.user1 == self.id or Conversation.user2 == self.id).all() 来做到这一点很重要。

有可能吗?

如果是,怎么!!

0 个答案:

没有答案