繁体   English   中英

通过另一个字段而不是主键对SQLAlchemy关系进行排序

[英]Ordering SQLAlchemy relationship by another field, not by primary key

我在金字塔应用程序中使用sqlalchemy的以下模型:

class Issue(base_iop):
    __tablename__ = 'issues'
    issueid = Column(BIGINT, primary_key=True, name="ISSUEID")
    issuenum = Column(VARCHAR(20), name="ISSUENUM")
    status = Column(VARCHAR(32), name="STATUS")
    datetime = Column(TIMESTAMP, name="ISSUETIME")

class Related(base_iop):
    __tablename__ = 'related'
    relationid = Column(BIGINT, primary_key=True, name="ROWSTAMP")
    parent_num = Column(VARCHAR(20), ForeignKey('issue.ISSUENUM'),name="RECORDKEY")
    children_num = Column(VARCHAR(20), ForeignKey('issue.ISSUENUM'), name="RELATEDKEY")
    issues = relationship(iop, foreign_keys=[child_num])

我能得到就好使用问题的相关问题:该issues的相关表的属性:

for related in db.query(Issue).all()[0].issues:
    print related.status

但是,我没有找到通过datetime属性排序问题的解决方案。 如果Related具有这样的datetime属性,则在关系中使用order_by应该非常简单:

class Issue(base_iop):
    __tablename__ = 'issues'
    issueid = Column(BIGINT, primary_key=True, name="ISSUEID")
    issuenum = Column(VARCHAR(20), name="ISSUENUM")
    status = Column(VARCHAR(32), name="STATUS")
    datetime = Column(TIMESTAMP, name="ISSUETIME")
    children =  relationship("Related", foreign_keys="[Related.parent_num]", backref="parent", order_by="[Related.datetime]")

class Related(base_iop):
    __tablename__ = 'related'
    relationid = Column(BIGINT, primary_key=True, name="ROWSTAMP")
    parent_num = Column(VARCHAR(20), ForeignKey('issue.ISSUENUM'),name="RECORDKEY")
    children_num = Column(VARCHAR(20), ForeignKey('issue.ISSUENUM'), name="RELATEDKEY")
    datetime = Column(TIMESTAMP, name="ISSUETIME")
    issues = relationship(iop, foreign_keys=[child_num])

如何通过其他字段而不是像现在这样通过主键来排序相关问题?

关系接受关键字参数order_by来处理关系的默认顺序。 它应该是这样的:

issues = relationship(iop, foreign_keys=[child_num], order_by="Issue.datetime")

请注意,如果需要处理,则backref函数具有相同的关键字。

在这里您可以阅读更多信息: http : //docs.sqlalchemy.org/en/rel_1_0/orm/tutorial.html#building-a-relationship关于此主题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM