Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Peewee ORM:基于外键字段的属性进行选择(反向参考)_Python_Python 3.x_Sqlite_Peewee - Fatal编程技术网

Python Peewee ORM:基于外键字段的属性进行选择(反向参考)

Python Peewee ORM:基于外键字段的属性进行选择(反向参考),python,python-3.x,sqlite,peewee,Python,Python 3.x,Sqlite,Peewee,我正在尝试根据外键字段中的值进行选择 我的模型是这样的: class Domain(BaseModel): domain_check_time = DateTimeField() domain_name = CharField() domain_health = BooleanField() domain_registration_expiry_date = DateField() domain_registration_expiry_health = BooleanField() domain

我正在尝试根据外键字段中的值进行选择

我的模型是这样的:

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\u batch\u time
的mxtoolbox\u batch\u time属性返回N个域

我试图用for循环来思考这个问题的逻辑,但遇到了麻烦——我还怀疑有一种更优雅的方法

这是我能够得出的近似值(伪代码):


与其在域中循环,为什么不发现哪个MXToolboxBatch是最新的(即max(MXToolboxBatch\u batch\u time))。然后根据该结果加入域和MXToolboxBatch。在uber伪代码中:

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)
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)