插入数据时如何解决“ peewee.InternalError:(1364,“字段'id'没有默认值”))”

时间:2019-01-28 14:56:37

标签: python mysql peewee

我正在通过peewee将一些数据插入Heroku MySQL数据库

Place.create(day="1", time="20", place="1")

我收到错误消息

peewee.InternalError: (1364, "Field 'id' doesn't have a default value")

我找到了一个答案,说我需要在MySQL中关闭严格模式,但似乎没有用。我还尝试将auto_increment添加到id,但是看起来毫无意义,因为它已经具有primary_key值

这是酒吧的预订应用程序,我想将用户模型和位置模型与预订模型连接起来。

class User(BaseModel):
    id = IntegerField(primary_key=True)
    username = CharField(unique=True)

class Place(BaseModel):
    id = IntegerField(primary_key=True)
    day = CharField()
    time = CharField()
    pl = CharField()

class Reservation(BaseModel):
    id = IntegerField(primary_key=True)
    u_id = ForeignKeyField(User, backref='reservs')
    p_id = ForeignKeyField(Place, backref='reservs')

这段代码将数据加载到Place中。最后一行给我错误。

for day in range(1,8):
    for time in range(18, 26, 2):
        for p in range(1, 9):
            Place.create(day=str(day), time=str(time), pl=str(p))

我已经成功地将其插入本地SQLite数据库,但在Heroku上它根本不适用于MySQL

2 个答案:

答案 0 :(得分:-1)

问题在于您没有为id分配任何值。由于id是主键,因此必须具有一个值,并且在没有提供默认值的情况下也没有定义默认值。您应该将代码更改为以下内容:

for day in range(1,8):
    for time in range(18, 26, 2):
        for p in range(1, 9):
            Place.create(id=id,day=str(day), time=str(time), pl=str(p))

您还可以将id列设置为自动递增,这样它将自动获取值

编辑

如果您需要设置id,可以这样操作:

id=1
for day in range(1,8):
    for time in range(18, 26, 2):
        for p in range(1, 9):
            Place.create(id=id,day=str(day), time=str(time), pl=str(p))
            id=id+1

答案 1 :(得分:-1)

您应该使用-match而不是AutoField。要自动递增整数主键时,应使用IntegerField(primary_key=True)AutoField表示您正在为主键明确指定整数值,而这实际上并不是您真正想要的。