常规建表语句:

CREATE TABLE `test_table` (
`id` int(11) NOT NULL,
`name` char(64) NOT NULL,
`password` char(64) NOT NULL,
PRIMARY KEY (`name`,`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='test';

解析脚本代码:


# coding:utf-8

import re
def table_design_transfer(table_design):
type_map = {"varchar":"String","datetime":"DateTime","bigint":"BigInteger","smallint":"SmallInteger","tinyint":"SmallInteger","text":"Text","int":"Integer","double":"Float","char":"String","set":"Enum"}
l = table_design.split("\n") # 表设计行拆分
length = len(l)
s = []
primary_key_l = []
for i in range(length): # 遍历表设计行
j = l[length-1-i].strip().split(" ") # 倒序遍历,并按空格切分
if len(j)>2: # 只关注行长度超过2的元素
column = j[0].replace("`","")
i_type = j[1]
if column == "PRIMARY":
primary_key_l = re.sub(r'`|\(|\)','',j[2]).split(",") # 拿到主键key
continue
elif column == "CREATE": # 获取表名
table_name = j[2].replace("`","")
s.append(" "+'__tablename__ = "%s"' % table_name)
s.append("class %s(Base):" % table_name)
continue
elif column in ("UNIQUE",")","KEY"): # 非表列名,跳过
continue
if i_type in type_map.keys(): # 类型存在映射表中
i_type = i_type.replace(i_type,type_map[i_type])+"()"
elif "(" in i_type and i_type.split("(")[0] in type_map.keys(): # 类型有长度声明,提取类型字段,找到映射表映射value,并替换
old_type = i_type.split("(")[0]
new_type = type_map[i_type.split("(")[0]]
i_type = i_type.replace(old_type,new_type)
else:
print "Catch any case not in type_map:%s" % i_type if column in primary_key_l: # 列名存在主键数组中
i_type = i_type + ", primary_key=True"
s.append(" "+column + " = Column(" + i_type + ")")
for i in s[::-1]: # 反序输出
print i

输出结果:

class test_table(Base):
__tablename__ = "test_table"
id = Column(Integer(11), primary_key=True)
name = Column(String(64), primary_key=True)
password = Column(String(64))

sqlalchemy库官方文档:http://docs.sqlalchemy.org/en/latest/contents.html

sqlalchemy库官方文档(中文):http://www.cnblogs.com/iwangzc/p/4112078.html(感谢作者的分享)

faker库官方文档:https://faker.readthedocs.io/en/master/locales/zh_CN.html

faker库博客:https://www.jianshu.com/p/6bd6869631d9

脚本工具---自动解析mysql建表语句,生成sqlalchemy表对象声明的更多相关文章

  1. Python 一键拉取Git分支源码自动解析并执行SQL语句

    基于Python实现自动拉取Git分支源码自动解析并执行SQL语句 by:授客 QQ:1033553122 1.代码用途 开发过程中,研发人员会提交SQL更新脚本到Git源码库,然后测试负责去拉取这些 ...

  2. MySQL建表语句生成Golang代码

    1. 背景 对于后台开发新的需求时,一般会先进行各种表的设计,写各个表的建表语句 然后根据建立的表,写对应的model代码.基础的增删改查代码(基础的增删改查服务可以划入DAO(Data Access ...

  3. (转载)根据数据字典表定义的表结构,生成创建表的SQL语句

    <来源网址:http://www.delphifans.com/infoview/Article_221.html>根据数据字典表定义的表结构,生成创建表的SQL语句 //1.  类名:T ...

  4. sqlserver数据库导出表结构和表数据生成创建表和insert语句

    问题描述: 有时候我们只需要导出一张表和表数据到另外一个数据库,如果是备份整个库的话,就会很麻烦那样,没法满足需求. 解决方法: 以sqlserver2014为例:把MGActivity数据库的bat ...

  5. sqlacodegen:通过mysql语句生成sqlalchemy的model

    引用网页描述:这个工具读取现有数据库的结构并生成相应的SQLAlchemy模型代码. 使用方法详细描述在如下连接中. 先简要介绍使用方法: 安装:pip install  sqlacodegen sq ...

  6. SQL Server复制表结构和表数据生成新表的语句

    参考:http://topic.csdn.net/t/20020621/09/820025.html SELECT   *   INTO   newTableName   FROM   oldTabl ...

  7. shell脚本每天自动备份mysql数据库

    一.mysql提供了一个mysqldump的工具可以方便的导出导入数据库信息: 二.使用命令行shell测试执行mysqldump,理解必备的参数,查看生成的sql备份文件是否符合需求: /usr/b ...

  8. MySQL 使用while语句向数据表中批量插入数据

    1.创建一张数据表 mysql> create table test_while ( -> id int primary key) charset = utf8; Query OK, ro ...

  9. mysql数据库去重语句和不同表之间列的复制语句

    1.去重语句:DELETE FROM `v_klg_item` WHERE id NOT IN (SELECT * FROM (SELECT MAX(id) FROM `v_klg_item` GRO ...

随机推荐

  1. 关于JS解析编历JSON数组(含多维数组)

    第一部分:      ].xing) 第二部分:                         }    解释:    countryObj 为value对象的一个属性明    value[coun ...

  2. jQuery可自动播放动画的焦点图

    在线演示 本地下载

  3. jenkins添加GIT repository报错

    添加了ssh互信,但一直提示如下错误. Failed to connect to repository : Command "git ls-remote -h git@git.xxx.cn: ...

  4. 20145201 《Java程序设计》第四周学习总结

    20145201 <Java程序设计>第四周学习总结 教材学习内容总结 本周学习了课本第六.七章内容,即继承与多态.接口与多态. 第六章 继承与多态 6.1 何谓继承 6.1.1 继承共同 ...

  5. QT中没有byte

    QT里没有没有byte数据类型的 自己定义:#define byte unsigned char

  6. 网络性能监测工具smokeping

    smokeping简介: smokeping是rrdtool的作者Tobi Oetiker的作品,所以它在图形显示方面有很大优势,也是一个很有特点的opensource工具:多种探测方式,包括fpin ...

  7. C3p0的参数

    C3p0的参数设置:ComboPooledDataSource和BasicDataSource一样提供了一个用于关闭数据源的close()方法,这样我们就可以保证Spring容器关闭时数据源能够成功释 ...

  8. on绑定阻止冒泡失败

    使用zepto库,有如下dom <div id="J_parent"> <a href="#"> <span>点我有惊喜&l ...

  9. scala学习手记34 - trait方法的延迟绑定

    trait的方法的延迟绑定就是先混入的trait的方法会后调用.这一点从上一节的实例中也可以看出来. 下面再来看一个类似的例子: abstract class Writer { def write(m ...

  10. org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 语法分析器在此文档中遇到多个 "64,000" 实体扩展; 这是应用程序施加的限制

    使用SAX解析XML文件.XML文件有1.5G,程序抛出了这个问题: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 语法 ...