Peewee示例中使用主键的SQL语法错误

时间:2015-02-17 23:58:49

标签: python mysql syntax-error primary-key peewee

我在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)

1 个答案:

答案 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()