获取Peewee中对象集的最新相关对象

Dav*_*ger 7 python sqlite peewee

假设我有一个对象模型A,它与Peewee中的B有一对多的关系,使用sqlite后端.我想获取一些A并使用最新的B加入每个.他们是否可以在没有循环的情况下执行此操作?

class A(Model):
    some_field = CharField()
class B(Model):
    a = ForeignKeyField(A)
    date = DateTimeField(default=datetime.datetime.now)
Run Code Online (Sandbox Code Playgroud)

天真的方式是调用order_by和limit(1),但这将适用于整个查询,所以

q = A.select().join(B).order_by(B.date.desc()).limit(1)
Run Code Online (Sandbox Code Playgroud)

自然会产生单身人士的结果

q = B.select().order_by(B.date.desc()).limit(1).join(A)
Run Code Online (Sandbox Code Playgroud)

我要么使用prefetch错误,要么它不适用于此,因为

q1 = A.select()
q2 = B.select().order_by(B.date.desc()).limit(1)
q3 = prefetch(q1,q2)
len(q3[0].a_set)
len(q3[0].a_set_prefetch)
Run Code Online (Sandbox Code Playgroud)

根据需要,这些集合都不具有长度1.有谁知道如何做到这一点?

Dav*_*ger 2

我意识到我需要了解函数和 group_by。

q = B.select().join(A).group_by(A).having(fn.Max(B.date)==B.date)
Run Code Online (Sandbox Code Playgroud)