【发布时间】:2020-10-05 17:16:41
【问题描述】:
我有 3 个模型
class A(Base):
__tablename__ = 'table_a'
id = ...
title = ...
timestamp = ... # CURRENT_TIMESTAMP
class B(Base):
__tablename__ = 'table_b'
id = ... # primary
timestamp = ... # CURRENT_TIMESTAMP
a_id = Column(Integer, ForeignKey('table_a')) # references to A model
class C(Base):
__tablename__ = 'table_c'
id = ... # primary
timestamp = ... # CURRENT_TIMESTAMP
b_id = Column(Integer, ForeignKey('table_b')) # references to B model
示例表
table_a
id timestamp
1 2020-01-01 00:00:01
2 2020-07-01 12:14:12
etc...
table_b
id a_id timestamp
1 1 2020-05-04 00:00:01
2 1 2020-07-01 12:14:12
3 2 2020-07-01 12:14:12
etc...
table_c
id b_id timestamp
1 1 2020-06-04 00:12:01
2 2 2020-08-01 11:14:12
3 2 2020-11-01 12:14:12
etc...
所以我需要实现查询以获取每个 A 的行,其中每个 A 按时间戳(或 id)具有最新的 B,对于这个 B,我需要按时间戳获取最新的 C
id = 1 的 A 示例我将拥有
A.id = 1,B.id = 2,C.id = 3
我知道如何使用子查询通过时间戳获取最大值
sub_c = db.session.query(
C.b_id,
func.max(C.timestamp).label('c_max_tmstmp')
).group_by(C.b_id).subquery('c_query')
sub_b = db.session.query(
B.a_id,
func.max(B.id).label('max_id')
).group_by(B.a_id).subquery('b_query')
但我不明白如何将它们与 A 结合起来
【问题讨论】:
标签: python sql orm sqlalchemy flask-sqlalchemy