【发布时间】:2021-05-02 14:38:58
【问题描述】:
我已经尝试了来自this 问题和this 的解决方案,但失败了(这些解决方案都在这里),我不知道另外说什么,从逻辑上讲,FK(发件人和收件人)都必须存在在用户中,从技术上讲,这里的所有外观都是正确的
class User(Base):
__tablename__ = "users"
# # # META # # #
id = Column(Integer, primary_key=True, index=True)
email = Column(String, unique=True, index=True, nullable=False)
# # # RELATIONSHIPS # # #
messages = relationship("Message", back_populates="users", cascade="all, delete")
class Message(Base):
__tablename__ = "messages"
id = Column(Integer, primary_key=True)
sender = Column(Integer, ForeignKey('users.id'), nullable=False)
recipient = Column(Integer, ForeignKey('users.id'), nullable=False)
data = Column(String, nullable=False)
created_datetime = Column(DateTime, server_default=func.now())
# # # RELATIONSHIPS # # #
senders = relationship("User", foreign_keys=[sender], back_populates="messages")
recipients = relationship("User", foreign_keys=[recipient], back_populates="messages")
sqlalchemy.exc.AmbiguousForeignKeysError: Could not determine join condition between parent/child tables on relationship User.messages - there are multiple foreign key paths linking the tables. Specify the 'foreign_keys' argument, providing a list of those columns which should be counted as containing a foreign key reference to the parent table.
python-BaseException
我尝试了什么:
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, index=True)
email = Column(String, unique=True, index=True, nullable=False)
sent_messages = relationship("Message", back_populates="users", cascade="all, delete")
received_messages = relationship("Message", back_populates="users", cascade="all, delete")
class Message(Base):
__tablename__ = "messages"
id = Column(Integer, primary_key=True)
sender = Column(Integer, ForeignKey('users.id'), nullable=False)
recipient = Column(Integer, ForeignKey('users.id'), nullable=False)
data = Column(String, nullable=False)
created_datetime = Column(DateTime, server_default=func.now())
senders = relationship("User", foreign_keys=[sender], back_populates="messages")
recipients = relationship("User", foreign_keys=[recipient], back_populates="messages")
Could not determine join condition between parent/child tables on relationship User.sent_messages - there are multiple foreign key paths linking the tables. Specify the 'foreign_keys' argument, providing a list of those columns which should be counted as containing a foreign key reference to the parent table.
【问题讨论】:
-
在 Users 类中,尝试为
sent_messages和received_messages创建单独的关系,而不是将它们全部放在一个关系中。 -
@GordThompson 查看更新的答案
标签: python sqlalchemy flask-sqlalchemy