python自动生成sql建表语句

python自动生成sql建表语句

本文构建的是TD数据库的建表语句生成,请自行更改一下代码可以适应多种数据库。
首先展示一下我们的输入一张表格(excel表)
情况如下:
在这里插入图片描述
这是一个有多张表的数据字典。
第一列是表名
第二列是字段名(英文)
第三列是字段名(中文)
第四列是数据类型
第五列是约束条件
每个表最后的行用来放索引
导入表格,直接生成建表语句:
直接上代码吧,难度不大,无非是一些获取,然后组合而已
It’s very easy!

import pandas as pd
filepath = '路径'
dtf = pd.read_excel(filepath,header=None,na_filter=False)
schema = 'ODS_DATA'
all_sql = ''
## 表头位置
biao_index = []
for i in range(len(dtf)):
    if dtf[0][i]  !='':
        biao_index.append(i)
##最后一个约束条件需要用;号结尾
biao_index.append(len(dtf))

## )号位置        
ziduan_index = []
for i in range(len(dtf)):
    if dtf[3][i] !='' and dtf[3][i+1]=='':
        ziduan_index.append(i)
        
        
for i in range(len(dtf)):
    if dtf[0][i]  !='':           #第一列不为0,即标题部分
        Cname = dtf[0][i].split('【')[0]
        Ename = dtf[0][i].split('【')[1].split('】')[0]
        #drop表
        sql_shuoming = '========================================================='+'\n'
        sql_drop = 'DROP TABLE '+schema+'.'+Ename+';'+'\n'
        #建表头
        sql_cre = 'CREATE SET TABLE '+schema+'.'+Ename+'\n'+'('+'\n'
        #####判断有没有varchar类型
        #主体
        if 'varchar' in dtf[3][i] or 'VAR' in dtf[3][i]:
            sql_ziduan = str(dtf[1][i])+"  "+str(dtf[3][i])+"  CHARACTER  SET  UNICODE  CASESPECIFIC  "+str(dtf[4][i])+',\n'
        else:
            sql_ziduan = str(dtf[1][i])+"  "+str(dtf[3][i])+" "+str(dtf[4][i])+',\n'
        sql = sql_shuoming+Cname+Ename+'\n'+sql_shuoming+sql_drop+sql_cre+sql_ziduan
        all_sql= all_sql+sql
    else:
        ##判断是否为字段之类
        if dtf[3][i] !='':   #第三列不为空,即为字段部分
            if i not in ziduan_index:############普通字段,结尾
                if 'varchar' in dtf[3][i] or 'VAR' in dtf[3][i]:
                    ziduan = str(dtf[1][i])+"  "+str(dtf[3][i])+"  CHARACTER  SET  UNICODE  CASESPECIFIC  "+str(dtf[4][i])+',\n'
                else:
                    ziduan = str(dtf[1][i])+"  "+str(dtf[3][i])+" "+str(dtf[4][i])+',\n'
                all_sql = all_sql+ziduan
            else:###############最后一个字段用)结尾
                if 'varchar' in dtf[3][i] or 'VAR' in dtf[3][i]:
                    ziduan = str(dtf[1][i])+"  "+str(dtf[3][i])+"  CHARACTER  SET  UNICODE  CASESPECIFIC  "+str(dtf[4][i])+'\n'+')'+'\n'
                else:
                    ziduan = str(dtf[1][i])+"  "+str(dtf[3][i])+" "+str(dtf[4][i])+'\n'+')'+'\n'
                all_sql = all_sql+ziduan

        else:
            if (i+1) in biao_index:
                sql_index = str(dtf[1][i])+" "+str(dtf[2][i])+';\n'
                all_sql = all_sql+sql_index
            else:
                sql_index = str(dtf[1][i])+" "+str(dtf[2][i])+'\n'
                all_sql = all_sql+sql_index
print(all_sql)

##############################comment##################################
comment = ''
for i in range(len(dtf)):
    if dtf[0][i]  !='':                    #第一列不为0,即标题部分
        Cname = dtf[0][i].split('【')[0]
        Ename = dtf[0][i].split('【')[1].split('】')[0]
        shuoming = '====================================================\n'
        com_title = 'COMMENT ON TABLE '+schema+'.'+Ename+'  IS  '+"'"+Cname+"'"+';\n'
        comment = comment+shuoming+Cname+Ename+'\n'+shuoming+com_title
    elif dtf[3][i] !='':
        com_zhuti = 'COMMENT ON  COLUMN'+schema+'.'+Ename+'.'+str(dtf[1][i])+'  IS  '+"'"+str(dtf[2][i])+"'"+';\n'
        comment = comment+com_zhuti
print(comment)

其实我还做了个界面,大概效果如下视频:

Python自动生成sql建表语句

需要的同志可以转到我上传的资源处下载
https://download.csdn.net/download/weixin_45082522/15924105

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值