首页 > 解决方案 > 如何正确地使用 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)

我做错了什么,我的想法在哪里?

标签: pythonsqlalchemy

解决方案


推荐阅读