常规建表语句:

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. jQuery个人名片焦点图

    在线演示 本地下载

  2. React Native实战系列教程之自定义原生UI组件和VideoView视频播放器开发

    React Native实战系列教程之自定义原生UI组件和VideoView视频播放器开发   2016/09/23 |  React Native技术文章 |  Sky丶清|  4 条评论 |  1 ...

  3. centos上mailx通过465端口发送邮件

    最近在看zabbix发送邮件的时候,发现自己的邮件总是无法发送,这里可能是外网防火墙禁止25端口,那么如何绕过25端口呢?  我使用的是163邮箱的TSL加密协议465端口 由于mailx基本配置很简 ...

  4. spring security使用hibernate进行查询数据库验证

    前面查询数据库采用的都是jdbc方式,如果系统使用的是hibernate,该如何进行呢,下面就是实现步骤,关键还是实现自定义的UserDetailsService 项目结构如下: 使用hibernat ...

  5. eclipse官网下载

    Provided by IBM Cloud Eclipse IDE for Java Developers http://eclipse.bluemix.net/packages/photon/dat ...

  6. Dos命令的巧用 - 转载

    Dos命令的巧用 豪华绚丽的Windows让人们把DOS抛到遥远的记忆角落,然而,真正有价值的东西不会轻易退出历史的舞台.很多人都已经习惯于 Windows的图形化用户界面,熟不知古老的DOS命令却可 ...

  7. javascript打开新页面的方法

    方案一: A标签: 这里要注意target的设置,_Blank是指新窗口,也可以用js来模拟创建. <a href="http://www.cnblogs.com" targ ...

  8. Android -- SQLite 数据库创建,增删改查,事务处理

    1. 概述 在Android平台上,集成了一个嵌入式关系型数据库-SQLite,SQLite3支持 NULL.INTEGER.REAL(浮点数字).TEXT(字符串文本)和BLOB(二进制对象)数据类 ...

  9. Linux:安装Zookeeper

    1.下载 wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.5.3-beta/zookeeper-3.5.3-beta.tar.gz ...

  10. lightoj1197区间素数筛

    模板题,不过好像有点问题,当a==1的时候,答案把一也算进去了,要减去 #include<map> #include<set> #include<cmath> #i ...