我有一个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.user1
或Conversation.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()
来做到这一点很重要。
有可能吗?
如果是,怎么!!