簡體   English   中英

更新時出現Peewee異步意外關鍵字

[英]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.

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