按另一个字段而不是主键排序 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])
我可以很好地获得问题的相关问题:相关 table 的 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 关于这个主题
我在金字塔应用程序中使用 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])
我可以很好地获得问题的相关问题:相关 table 的 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 关于这个主题