我在quickstart tutorial之后有一个简单的Peewee数据库模型,并且我正在尝试向数据库添加一个实例。它返回错误
'您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在\ {#1; WHERE(
image
附近使用正确的语法。url
= \' foo \')\& #39;在第1行'
我尽可能地将代码配对,但我无法找到我的错误。这是我的模型在最小和可重复(我希望,它在我的机器上重现)的例子。修改MySQLDatabase
来电以适应您的设置。我开始使用名为' test'。
from peewee import *
database = MySQLDatabase('test', **{'password': '1234', 'user': 'root'})
class BaseModel(Model):
class Meta:
database = database
class Image(BaseModel):
url = CharField(primary_key=True)
database.connect()
database.create_tables([Image])
image_url = 'foo'
image_entry = Image(url=image_url)
image_entry.save()
示例代码的最后一行引发错误。如果我查看我的数据库,我可以看到表格'图像'已成功创建。
describe image;
返回
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| url | varchar(255) | NO | PRI | NULL | |
+-------+--------------+------+-----+---------+-------+
该表仍然按预期为空,因为在save语句期间出现错误。
select * from image:
返回
Empty set(0.00 sec)
答案 0 :(得分:2)
这可能会对您有所帮助:
https://peewee.readthedocs.org/en/2.0.2/peewee/fields.html#non-integer-primary-keys
from peewee import Model, PrimaryKeyField, VarCharColumn
class UUIDModel(Model):
# explicitly declare a primary key field, and specify the class to use
id = CharField(primary_key=True)
自动增量ID,正如其名称所示,是自动生成的 在您向数据库中插入新行时为您服务。 peewee的样子 确定是否执行INSERT而不是UPDATE 检查主键值是否为None。如果没有,它会做一个 插入,否则它会对现有值进行更新。从那以后 我们的uuid示例,数据库驱动程序不会生成新的ID,我们需要 手动指定它。当我们第一次调用save()时,传递 在force_insert = True:
inst = UUIDModel(id=str(uuid.uuid4()))
inst.save() # <-- WRONG!! this will try to do an update
inst.save(force_insert=True) # <-- CORRECT
# to update the instance after it has been saved once
inst.save()