开发了一个自动生成建表语句的python小程序,用生成好的数据表插入数据,发现了问题。
运行环境 Runtime environment
1 2 3
| 操作系统: Windos10 navicat: 15.0.2 mysql: 5.7.31
|
症状
scrapy 爬虫采集入库的时候,管道打印了报错日志。
1
| ERROR 1364 (HY000): Field 'chembl_id' doesn't have a default value
|
问题原因
建表的sql语句中,chembl_id字段设置NOT NULL,不能为空,也没赋予默认值。
导致的报错!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| CREATE TABLE `!!!!此处填写表名!!!!` ( `id` int(25) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增id(仅作计数使用不可作为关联依据!)', `chembl_id` varchar(648) NOT NULL COMMENT 'chembl_id', `chembl_target_type` varchar(648) DEFAULT NULL COMMENT 'chembl_target_type', `chembl_target_name` varchar(648) DEFAULT NULL COMMENT 'chembl_target_name', `chembl_target_alias` json DEFAULT NULL COMMENT 'chembl_target_alias', `chembl_target_organisim` varchar(648) DEFAULT NULL COMMENT 'chembl_target_organisim', `chembl_target_classification` json DEFAULT NULL COMMENT 'chembl_target_classification', `chembl_drug_name` json DEFAULT NULL COMMENT 'chembl_drug_name', `chembl_drug` json DEFAULT NULL COMMENT 'chembl_drug', `guidetopharmacology` json DEFAULT NULL COMMENT 'guidetopharmacology', `human_protein_atlas` json DEFAULT NULL COMMENT 'human_protein_atlas', `open_targets` json DEFAULT NULL COMMENT 'open_targets', `chembl_pharos_url` json DEFAULT NULL COMMENT 'chembl_pharos_url', `ebi_chembl_url` text COMMENT 'ebi_chembl_url', `raw_datas` json DEFAULT NULL COMMENT 'raw_datas', `update_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '采集时间', PRIMARY KEY (`id`) USING BTREE, UNIQUE KEY `unique_id` (`id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='总之就是特别牛逼的一表数据';
|
解决办法
将对应语句的NOT NULL改为DEFAULT NULL即可。
1
| `chembl_id` varchar(648) DEFAULT NULL COMMENT 'chembl_id',
|
但是要结合业务场景,如果是为了建立索引的字段,那就要看具体情况来修改了。