簡體   English   中英

Peewee ORM:根據外鍵字段(后向引用)的屬性進行選擇

[英]Peewee ORM: Select based on attributes on foreign key fields (backrefs)

我正在嘗試根據外鍵字段中的值進行選擇。

我的模型如下所示:

class Domain(BaseModel):
domain_check_time = DateTimeField()
domain_name = CharField()
domain_health = BooleanField()
domain_registration_expiry_date = DateField()
domain_registration_expiry_health = BooleanField()
domain_ssl_issuer_cn = CharField()
domain_ssl_expiry_date = DateField()
domain_ssl_expiry_health = BooleanField()
domain_mxtoolbox_health = BooleanField(null = True)

class MXToolboxReport(BaseModel):
    domain = ForeignKeyField(Domain, backref = 'mxtoolbox_reports', null = True)
    command = CharField()
    response = TextField()

class MXToolboxBatch(BaseModel):
    mxtoolbox_batch_time = DateTimeField()
    domain = ForeignKeyField(Domain, backref = 'mxtoolbox_batch', null = True)
    report = ForeignKeyField(MXToolboxReport, backref = 'mxtoolbox_batch', null = True)

我正在嘗試根據最新的mxtoolbox_batch_time的mxtoolbox_batch_time屬性返回N個域

我正在嘗試使用for循環對此進行邏輯思考,但是遇到了麻煩-我還懷疑還有一種更優雅的方法。

這是我能想到的一種近似(偽代碼):

domains = Domain.select()

newest_batches = MXToolboxBatch.Select.limit(0)

for domain in domains:
    newest_batch = MXToolboxBatch.select().where(MXToolboxBatch.domain == domain).order_by(MXToolboxBatch.id.desc()).get()
    newest_batches += newest_batch

Domain.select().join(newest_batches).order_by(MXToolboxBatch.mxtoolbox_batch_time.desc()).limit(25)

而不是遍歷域,為什么不發現哪個MXToolboxBatch是最新的(即max(mxtoolboxbatch_batch_time))。 然后根據該結果加入Domains和MXToolboxBatch。 uber-偽代碼中:

newest_batch_is = MXToolboxBatch.Select(fn.MAX(mxtoolboxbatch_batch_time))

result_is = Domain.Select().join(MXToolboxBatch).where(MXToolboxBatch.batch_time = newest_batch_is).limit(N)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM