2017-10-10 89 views
0

在使用peewee异步意想不到的关键字,得到了尝试更新的对象时的错误: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并使用它作为一个外键,但得到了同样的错误(现在的警报关键字)。

我认为可能存在继承问题,因为这个基类被继承来创建一个DefaultIssue类,它将被再次继承。由于某些原因,update()方法不期待此参数。

这里的对象__dict__和字段的打印的self.async_save()呼叫前右:

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

如果有任何我可以提供,请请。我不知道该做什么了。

回答

0

好吧,我很愚蠢。只是注意到我已经覆盖了更新方法。