新创建的 save() 出现 peewee 错误
peewee error on newly created save()
为了让自己熟悉 peewee,我偶然发现了以下奇怪的行为:给定一个 class 类似于此
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')
按预期工作。这似乎只有在使用的属性是主键时才会发生。
一个类似的问题似乎是 问题,其中没有产生错误,但也没有数据库条目。我知道解决方案的解决方法,但只是对这种奇怪的行为感到好奇。
使用非自增主键时需要使用save(force_insert=True)
。
为了让自己熟悉 peewee,我偶然发现了以下奇怪的行为:给定一个 class 类似于此
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')
按预期工作。这似乎只有在使用的属性是主键时才会发生。
一个类似的问题似乎是
使用非自增主键时需要使用save(force_insert=True)
。