How to fix "peewee.InternalError: (1364, "Field 'id' doesn't have a default value")" when data is inserted
How to fix "peewee.InternalError: (1364, "Field 'id' doesn't have a default value")" when data is inserted
我正在通过 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 一起使用
问题在于您没有为 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
您应该使用 AutoField
而不是 IntegerField(primary_key=True)
。 AutoField
当你想要自动递增的整数主键时应该使用。 IntegerField(primary_key=True)
意味着您显式指定了主键的整数值,这很少是您真正想要的。
我正在通过 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 一起使用
问题在于您没有为 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
您应该使用 AutoField
而不是 IntegerField(primary_key=True)
。 AutoField
当你想要自动递增的整数主键时应该使用。 IntegerField(primary_key=True)
意味着您显式指定了主键的整数值,这很少是您真正想要的。