See You Again

schemasync表结构同步问题及解决

自动化环境需要及时从测试环境同步mysql的表结构,选择的技术方案是python的一个第三方库schemasync,这个库使用起来整体是OK的,但是在某些情况下会生成有语法错误的sql文件,例如:

  1. MODIFY COLUMN `biz_id` varchar(10) NOT NULL DEFAULT AP AFTER `original_trans_id`
  2. ADD COLUMN remark varchar(50) NULL DEFAULT * FIRST

可以看出,这个库在处理表的列的默认值时是有问题的,一些字符串类型的默认值没有加引号,从而引发了语法错误。于是下决心找出这个bug。

这里判断是不是字符串类型,然后决定生成的语句要不要加引号。通过调试,发现 self.default 的类型是 unicode,不是 str,所以没走上面的判断分支。
到此差不多解决方案也有了,但是我在考虑这么明显的问题作者没考虑到吗?

python2在字符串处理这里是有坑的,从python3开始就没有这些个区别了。所以,建议感觉入手python3吧,会顺手很多。

2017-10-20 喜欢

Copyright © 2015-2022 BY-NC-ND 4.0

回到顶部 ↑