SqlAlchemy:加入另一个对象

时间:2013-04-19 23:35:45

标签: python sqlalchemy

我的小网站上有一张评论表和一张表格。网站的每个用户都可以对每条评论投票一次。

当向用户显示评论时,如果当前用户存在评论,我将从评论表和外部投票中进行选择。

有没有办法通过comment.my_vote进行投票将附加到评论的查询?

我现在正在这样做,查询返回每个结果的列表 - [评论,投票] - 我将它直接传递给我的模板。如果投票可能是评论的儿童对象,我更愿意。

2 个答案:

答案 0 :(得分:2)

设置模型以添加One-to-one relationship。来自链接的示例代码:

class Parent(Base):
    __tablename__ = 'parent'
    id = Column(Integer, primary_key=True)
    child = relationship("Child", uselist=False, backref="parent", 
        # lazy='joined', # @note: optional: uncomment this to have the 'child' always loaded when the parent is loaded.
    )

class Child(Base):
    __tablename__ = 'child'
    id = Column(Integer, primary_key=True)
    parent_id = Column(Integer, ForeignKey('parent.id'))
在您的情况下,

ParentCommentChildVote
然后,您可以查询Comment,同时急切地加载Vote。为此,它会建议取消注释上面注释掉的行,以便您的查询将只返回一个SQL语句。或者,您可以使用joinedload明确指定查询中Vote的加载:

res = query(Parent).options(joinedload(Parent.child))

答案 1 :(得分:0)

最后我决定使用查询返回的元组不是问题。