Sqlalchemy 从关系中获取数据

Dev*_*mes 4 sqlalchemy python-3.x

我有这个型号

\n\n
class Post(Base):\n    __tablename__ = \'posts\'\n    id = Column(Integer, primary_key=True)\n    content = Column(Text)\n    author = Column(Integer, ForeignKey(\'users.id\'))\n    to_topic = Column(Integer, ForeignKey(\'topics.id\'))\n\n    def __init__(self, content: str, author: int, to_topic: int) -> None:\n        self.content = content\n        self.author = author\n        self.to_topic = to_topic\n\nclass User(Base):\n    __tablename__ = "users"\n    id = Column(Integer, primary_key=True)\n    username = Column(String(30))\n    email = Column(String(40))\n    password = Column(String(255))\n    registred_at = Column(DateTime, default=datetime.datetime.now)\n    last_logged_in = Column(DateTime)\n    last_login_attempt = Column(DateTime)\n    avatar = Column(Integer, ForeignKey(\'files.id\'))\n    role = Column(String(20))\n    email_confirm = Column(Boolean, default=False)\n    children_forum = relationship(\'Forum\')\n    children_topic = relationship(\'Topic\')\n    children_post = relationship(\'Post\')\n
Run Code Online (Sandbox Code Playgroud)\n\n

我正在尝试获取包含 Post.content、Post.author.username 的查询,但如何在会话中执行此操作?

\n\n

我试过

\n\n
 posts = db_session.query(Post, User).filter(\n        Post.to_topic == topic_id).with_entities(Post.content, Post.author.username)\n
Run Code Online (Sandbox Code Playgroud)\n\n

但这不起作用,因为作者只是整数(id),所以我希望我需要以某种方式在一个查询中获取作者对象和发布对象,但我不知道如何。在 sql 中,只需 2 个查询就很容易,但在这里我不知道它\xc2\xb4s 是如何完成的。

\n

Gab*_*imm 5

 query_results = db_session.query(Post, User).\
     join(User, Post.author == User.id).\
     filter(
         Post.to_topic == topic_id
     ).all()
Run Code Online (Sandbox Code Playgroud)

我从未使用过 with_entities,但我知道这会给您一个元组列表,其中query_results[0]将是您的Post实例,并且query_results[1]将是您的User实例。

编辑:我相信您不必包含该Post.author == User.id位,但如果您明确连接,它会更清晰。