我正在通过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
答案 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
表示您正在为主键明确指定整数值,而这实际上并不是您真正想要的。