今天在执行python代码时,有一个插入数据库的操作,可是一直报错,说是id没有默认值
sqlalchemy.exc.DatabaseError: (mysql.connector.errors.DatabaseError) 1364 (HY000): Field 'id' doesn't have a default value
[SQL: INSERT INTO video_channel_group (name, fps, resolution, begin_date, end_date, is_active, is_can_delete, create_time, update_time) VALUES (%(name)s, %(fps)s, %(resolution)s, %(begin_date)s, %(end_date)s, %(is_active)s, %(is_can_delete)s, %(create_time)s, %(update_time)s)]
[parameters: {'name': '地方台', 'fps': 0, 'resolution': 0, 'begin_date': None, 'end_date': None, 'is_active': 1, 'is_can_delete': 1, 'create_time': datetime.datetime(2021, 12, 13, 6, 20, 52, 147757), 'update_time': datetime.datetime(2021, 12, 13, 6, 20, 52, 147769)}]
(Background on this error at: http://sqlalche.me/e/13/4xp6)
翻了翻代码,并没有发现什么问题,id已经设置为自增字段,可还是报错。
class VideoChannelGroup(model.Base):
# 表的名字:
__tablename__ = 'video_channel_group'
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String(100), default='')
fps = Column(Integer, default=0)
resolution = Column(Integer, default=0)
begin_date = Column(Date)
end_date = Column(Date)
is_active = Column(Boolean, default=True, comment='启停:1-启用,0-停用')
is_can_delete = Column(Boolean, default=True, comment='是否允许删除:1-是,0-否')
create_time = Column(TIMESTAMP)
update_time = Column(TIMESTAMP)
最后经过多次排查,终于发现了问题,原因是python的数据库配置文件init.sql里面的sql语句,并没有调成自增。
CREATE TABLE `video_channel_group` (
`id` int(11) unsigned NOT NULL COMMENT 'ID',
`name` varchar(100) DEFAULT '' COMMENT '频道模板名称',
-- `threshold` decimal(3,2) DEFAULT 0.00 COMMENT '阈值',
`fps` tinyint(4) DEFAULT '0' COMMENT '每秒帧数',
`resolution` int(11) DEFAULT '0' COMMENT '分辨率(宽度)',
-- `person_type_ids` varchar(500) DEFAULT '' COMMENT '人物类型ID',
`begin_date` date DEFAULT NULL COMMENT '开始日期',
`end_date` date DEFAULT NULL COMMENT '结束日期',
`is_active` tinyint(4) DEFAULT '1' COMMENT '启停:1-启用,0-停用',
`is_can_delete` tinyint(4) DEFAULT '1' COMMENT '是否允许删除:1-是,0-否',
`update_time` timestamp NULL DEFAULT NULL,
`create_time` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
---------------------------------------------------------------------
将上面第二行的id修改为`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
照着上图修改完.sql语句就ok了