Enhancement: Inspectdb adds data types and exception handling. Models can also be generated if there are types that cannot be handled.
-
Inspectdb adds
DECIMAL,DOUBLE,CHAR,TIMEdata type matching; inspectdb增加DECIMAL、DOUBLE、CHAR、TIME数据类型匹配; -
Add exception handling to avoid manually creating the entire model because specific data types are not supported. 添加异常处理,避免因为不支持特定的数据类型,手动创建整个模型。
可以加个单元测试
另外,更新一下changlog,感谢贡献!
这块的测试之前的部分是写在哪里?
之前好像没有,你可以加个,然后在本地执行make style ci保证通过持续集成检测
我一写业务的后端,让我写个测试,一时间不知道该从何下手,先下班了,明天再琢磨。🚀
你可以参考其他的
æç¨show create table {table} åºæ¥çç»æ
CREATE TABLE index_third_alternative (
id int unsigned NOT NULL AUTO_INCREMENT,
value smallint NOT NULL DEFAULT '0',
value_classification varchar(11) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'greed, fear',
timestamp int NOT NULL DEFAULT '0' COMMENT 'å¹³å°çæ¶é´',
PRIMARY KEY (id),
UNIQUE KEY uk_alternative_timestamp (timestamp)
) ENGINE=InnoDB AUTO_INCREMENT=81 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
模ååå»ºåºæ¥çç»æï¼ class Index_Third_Alternative(Model): id = fields.IntField(pk=True, ) value = fields.SmallIntField() value_classification = fields.CharField(max_length=11, null=True, ) collate = The UTF8MB4_UNICODE_CI data type type is not currently supported, please add it manually. timestamp = fields.IntField(unique=True, description='å¹³å°çæ¶é´', )
è¿ä¸ªæ¨¡åæ¯æ¹å®ä¹åçææï¼ä½æ¯ä¸å½±å代ç ççè§£ï¼è¿ä¸ª collate 并没æåºç°å¨æçæ°æ®åºå段å½ä¸ï¼ä¸ºä»ä¹å建模åçæ¶åå´å±ç¤ºåºæ¥äºï¼æç´¢äºåå¤©æ²¡ææ¾å°äº§çè¿ä¸ªé®é¢çåå ã
是解析错误吗
我刚才查出来来,是一个bug
è¿æ¯ä¼ è¿å»ç建表è¯å¥
CREATE TABLE keyword_tags (
id int NOT NULL AUTO_INCREMENT,
tag varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
type varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL,
unique_key varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL,
comment varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL,
PRIMARY KEY (id),
KEY ix_keyword_tags_type (type)
) ENGINE=InnoDB AUTO_INCREMENT=4218 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
这是ddlparse.py716行 ret = self._DDL_PARSE_EXPR.parseString(self._ddl) 解析出来的结果 [['id', [['int']], '', ['NOT NULL', 'AUTO_INCREMENT']], ['tag', [['varchar'], '64'], '', ['utf8mb4']], ['COLLATE', [['utf8mb4_bin']], '', ['DEFAULT NULL']], ['type', [['varchar'], '32'], '', []], ['COLLATE', [['utf8mb4_unicode_ci']], '', ['NOT NULL']], ['unique_key', [['varchar'], '32'], '', []], ['COLLATE', [['utf8mb4_unicode_ci']], '', ['NOT NULL']], ['comment', [['varchar'], '128'], '', []], ['COLLATE', [['utf8mb4_unicode_ci']], '', ['NOT NULL']], ['PRIMARY KEY', ['id']]]
那是第三库的问题了,有点尴尬
简单的办法是在inspectdb里头做判断,跳过名字为collate且数据类型为UTF8MB4_UNICOID_CI的,但是不知道会不会误伤。
大佬想办法吧,我去干活了
暂时要么解决该问题,要么重构,有一些想法,但是暂时没动力去弄