[英]Peewee async unexpected keyword when updating
使用peewee異步時,嘗試更新對象時出現錯誤:
Traceback (most recent call last):
File "./src/models/module.py", line 74, in run
await self._stage_alert_attach(target_alert)
File "./src/models/module.py", line 293, in _stage_alert_attach
await target_alert.attach(unattached_issues)
File "./src/models/alert.py", line 127, in attach
await issue.attach(self)
File "./src/models/issue.py", line 81, in attach
await self.async_save()
File "./src/models/base.py", line 40, in async_save
return await self._manager.update(self, only=self.dirty_fields)
File "/usr/local/lib/python3.6/site-packages/peewee_async.py", line 227, in update
query = obj.update(**field_dict).where(obj._pk_expr())
TypeError: update() got an unexpected keyword argument 'alert_id'
我無法弄清楚發生了什么,因為該字段是在基類中定義的:
class BaseIssue(BaseModel):
# Database fields
id = peewee.PrimaryKeyField()
module_id = peewee.IntegerField()
model = peewee.CharField(index=True)
model_id = peewee.CharField(index=True)
status = peewee.CharField(index=True)
metadata = JSONField()
alert_id = peewee.IntegerField(null=True)
created_at = peewee.DateTimeField(default=datetime.datetime.now)
solved_at = peewee.DateTimeField(null=True)
expired_at = peewee.DateTimeField(null=True)
class Meta:
def db_table_func(model_cls): return "Issues"
還嘗試使用alert
而不是alert_id
並將其用作外鍵,但是得到了相同的錯誤(現在帶有alert關鍵字)。
我認為繼承可能會有問題,因為繼承了此基類以創建將再次繼承的DefaultIssue類。 由於某種原因, update()
方法不需要此參數。
這是self.async_save()
調用之前的對象__dict__
和字段的打印:
>>> obj.__dict__
{
"_data": {
"created_at": datetime.datetime(2017, 10, 10, 17, 6, 8, 47075),
"id": 2,
"module_id": 3,
"model": "transaction",
"model_id": "23765771",
"status": "active",
"metadata": {
"transaction_id": 23765771,
"boleto_url": None,
"boleto_barcode": None
},
"alert_id": None,
"solved_at": None,
"expired_at": None
},
"_dirty": set(),
"_obj_cache": {},
"_logger": <Logger Issue 2 (INFO)>
}
>>> obj._meta.fields
{
"id": <peewee.PrimaryKeyField object at 0x7f49fdb2e198>,
"module_id": <peewee.IntegerField object at 0x7f49fdb2e3c8>,
"model": <peewee.CharField object at 0x7f49fdb2e710>,
"model_id": <peewee.CharField object at 0x7f49fdb2e7f0>,
"status": <peewee.CharField object at 0x7f49fdb2e860>,
"metadata": <playhouse.postgres_ext.JSONField object at 0x7f49fdb2e8d0>,
"alert_id": <peewee.IntegerField object at 0x7f49fdb2e940>,
"created_at": <peewee.DateTimeField object at 0x7f49fdb2e9b0>,
"solved_at": <peewee.DateTimeField object at 0x7f49fdb2ea20>,
"expired_at": <peewee.DateTimeField object at 0x7f49fdb2ea90>
}
如果我可以提供更多信息,請詢問。 我不知道該怎么辦了。
好吧,我很傻。 只是注意到我已經覆蓋了update方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.