【问题标题】:peewee error on newly created save()新创建的 save() 上的 peewee 错误
【发布时间】:2017-10-10 21:59:29
【问题描述】:

让自己熟悉 peewee,我偶然发现了以下奇怪的行为:给定一个与此类似的类

class Test(BaseModel):
    str = CharField(primary_key=True)

执行

instance = Test(str = 'something')
instance.save()

给出一个模糊的错误,抱怨一些“WHERE”:

Traceback (most recent call last):
  File "/usr/local/lib/python3.5/dist-packages/peewee.py", line 3830, in execute_sql
    cursor.execute(sql, params or ())
sqlite3.OperationalError: near "WHERE": syntax error

During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.5/dist-packages/peewee.py", line 5165, in save
    rows = self.update(**field_dict).where(self._pk_expr()).execute()
  File "/usr/local/lib/python3.5/dist-packages/peewee.py", line 3458, in execute
    return self.database.rows_affected(self._execute())
  File "/usr/local/lib/python3.5/dist-packages/peewee.py", line 2939, in _execute
    return self.database.execute_sql(sql, params, self.require_commit)
  File "/usr/local/lib/python3.5/dist-packages/peewee.py", line 3837, in execute_sql
    self.commit()
  File "/usr/local/lib/python3.5/dist-packages/peewee.py", line 3656, in __exit__
    reraise(new_type, new_type(*exc_args), traceback)
  File "/usr/local/lib/python3.5/dist-packages/peewee.py", line 135, in reraise
    raise value.with_traceback(tb)
  File "/usr/local/lib/python3.5/dist-packages/peewee.py", line 3830, in execute_sql
    cursor.execute(sql, params or ())
peewee.OperationalError: near "WHERE": syntax error

但是,直接使用创建实例

instance = Test.create(str = 'something')

按预期工作。这似乎只在使用的属性是主键时发生。 类似的问题似乎是this 问题,没有产生错误,但也没有数据库条目。我知道解决方案中的解决方法,但只是对这种奇怪的行为感到好奇。

【问题讨论】:

    标签: python peewee


    【解决方案1】:

    【讨论】:

    • 谢谢,我确实不知道这是有意的行为。但是,错误原因确实令人困惑。一条错误消息会引导更多正确的方向会很棒!
    猜你喜欢
    • 2013-08-12
    • 2018-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 2011-08-05
    • 1970-01-01
    相关资源
    最近更新 更多