python - 如何正确地使用 sqlalchemy 进行连接
问题描述
我很难理解 sqlalchemy 中的关系。
到目前为止,这是我的模型
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, index=True)
email = Column(String, unique=True, index=True)
hashed_password = Column(String)
name = Column(String)
giver = relationship('Handover', foreign_keys='giver_id', back_populates="giver")
receiver = relationship('Handover', foreign_keys='recipient_id', back_populates="receiver")
class Handover(Base):
__tablename__ = "handovers"
id = Column(Integer, primary_key=True, index=True)
lat = Column(Float)
lon = Column(Float)
text = Column(Text)
coin_id = Column(Integer, ForeignKey('coins.id'))
timestamp = Column(Integer, index=True, default = datetime.utcnow)
predecessor_id = Column(Integer, ForeignKey("handovers.id"))
recipient_id = Column (Integer, ForeignKey("users.id"))
giver_id = Column (Integer, ForeignKey("users.id"))
predecessor = relationship('Handover', backref=backref('successor', remote_side=id))
我希望每次移交都涉及两个用户:一个提供者和一个接收者。我知道这是错误的,但我很难理解,在哪里。
然后我想要的是获得一个移交对象,其中还包括接收者和给予者的用户名。我的 SQLalchemy 查询看起来像这样
result = db.query(models.Handover, models.User.name).join(models.User).filter(models.User.id == models.Handover.recipient_id)
我做错了什么,我的想法在哪里?
解决方案
推荐阅读
- sql-server - 当涉及 SUM 的多个 case 语句时,如何组合以下 2 个 sql 查询
- java - 我可以在自定义注释上使用任何注释吗
- python - 如何在 Python 中并排打印两个 for 循环的结果?
- python - def() 中的错误返回输出
- python - 用于 sftp AND 命令执行的服务器实现(使用 Paramiko)
- javascript - 正则表达式查找 5 个连续的字母(例如 abcde、noprst)
- android - 有没有办法只为某些 Android 版本设置意图过滤器?
- c# - 在 LINQ 方法中使用 StringBuilder 变量
- typescript - 如何键入带枚举的函数
- r - 合并 R 中的两列,其中一列是列表