# -*- coding: utf-8 -*-

import re

"""
建立相关表的字段
从源表创建指定的MySQL建表脚本

"""
# 目标表名称 lzb_decoration_houseinfo
table_name = 'lzb_decoration_audit'
# 原表名称
original_table_name="DecorationAudit"

print("#DROP TABLE IF EXISTS {0};".format(table_name))
print("CREATE TABLE {0} (".format(table_name))
print("id bigint(20) unsigned NOT NULL AUTO_INCREMENT")

with open('sql_server_table_source', encoding='UTF-8') as f:
for line in f.readlines():
#print(line)
if line=='\n':
continue

if re.match('.*(NOT.*NULL).*', line) is None:
if re.match('.*(.*NULL.*).*',line) is not None:
line = line.replace("NULL", " NOT NULL ")

#print(line)
# 获取注释
str_comment='未知'
list_comment=re.findall(r".*,(.*)",line)
if len(list_comment)==1:
str_comment=list_comment[0].strip()
# 获取注释后的字符
temp_line_list=re.findall(r"(.*),.*",line)
if temp_line_list is None or temp_line_list=="" or len(temp_line_list)==0:
continue

temp_line=temp_line_list[0]
# unrenow_reason varchar(512)
prefix_line=re.sub(r'(\[.*\])','',temp_line).strip()
#print(prefix_line)
#str_comment=re.sub("(\,)","",str_comment)
if re.match(r'.*int.*', prefix_line, flags=0) is not None:
print(","+prefix_line+" "+"NOT NULL "+"COMMENT '"+str_comment.strip()+"'")
continue

if re.match(r'.*decimal.*', prefix_line, flags=0) is not None:
print("," + prefix_line +"(18,2)"+ " " + "NOT NULL " + "COMMENT '" + str_comment.strip() + "'")
continue

if re.match(r'.*datetime.*', prefix_line, flags=0) is not None:
print("," + prefix_line + " " + "NOT NULL " + "COMMENT '" + str_comment.strip() + "'")
continue

if re.match(r'.*varchar.*', prefix_line, flags=0) is not None:
print("," + prefix_line + " " + "NOT NULL DEFAULT ''" + "COMMENT '" + str_comment.strip() + "'")
continue

print(",ts bigint NOT NULL DEFAULT 0 COMMENT '源表时间戳' ")
print(",sync_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '从原表同步到报表的时间'")
print(",modify_time datetime NOT NULL COMMENT '最后更新时间'")
print(",PRIMARY KEY (id)")
print(') ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;')

print("\n\n\n\n")

print("同步kettle脚本")

print("select ")
with open('sql_server_table_source', encoding='UTF-8') as f:
for line in f.readlines():
if line=='\n':
continue

str_original_field = ""
field_original_reg=re.findall(".*\[(.*)\].*",line)
if field_original_reg is not None:
str_original_field=field_original_reg[0]

result_field_nvarchar=re.findall('.*\](.*)\s*nvarchar.*',line)

is_nvarchar_field=False
is_bigint_field=False

str_target_field=""
if result_field_nvarchar is not None and len(result_field_nvarchar)>0:
str_target_field=result_field_nvarchar[0]
is_nvarchar_field=True
else:
result = re.findall('.*\](.*)(int|varchar|datetime|bigint|decimal|nvarchar).*', line)
if result is not None and len(result)!=0 and len(result[0])!=0:
str_target_field=result[0][0].strip()

if re.match('.*(bigint).*', line) is not None:
result_field_bigint = re.findall('.*\](.*)\s*bigint.*', line)
str_target_field=result_field_bigint[0].strip()

if is_nvarchar_field or re.match(r".*(varchar).*", line) is not None:
print("ISNULL(t.{0},'') AS {1} ,".format(str_original_field,str_target_field))
elif is_bigint_field:
print("ISNULL(t.{0},0) AS {1} ,".format(str_original_field, str_target_field))
elif re.match('.*(bigint).*',line) is not None or re.match(r".*(int|bigint|decimal).*",line) is not None:
print("ISNULL(t.{0},0) AS {1} ,".format(str_original_field, str_target_field))
elif re.match(r".*(datetime|date).*",line) is not None:
print("ISNULL(t.{0},'1970-01-01') AS {1} ,".format(str_original_field, str_target_field))
elif re.match(r".*(bit).*",line) is not None:
print("ISNULL(t.{0},0) AS {1} ,".format(str_original_field, str_target_field))
else :
print("error")

print(" GETDATE() as sync_time ,")
print(" GETDATE() as modify_time , ")
print("ISNULL(t.ts,0) AS ts ")
print(" from {0} as t with(nolock) where t.ts> ? ".format(original_table_name))

  

python 生产数据表脚本的更多相关文章

  1. python打印表格式数据,留出正确的空格和段落星号或注释

    python打印表格式数据,留出正确的空格,格式化打出 代码如下: def printPicnic(itemsDict,leftWidth,rightWidth): print('PICNIC ITE ...

  2. python编写shell脚本详细讲解

    python编写shell脚本详细讲解 那,python可以做shell脚本吗? 首先介绍一个函数: os.system(command) 这个函数可以调用shell运行命令行command并且返回它 ...

  3. 用 Python 替代 Bash 脚本(转)

    add by zhj: 其实作者是想说用Python来做那些Bash实现起来比较麻烦的部分,即将Bash与Python结合使用. 英文原文:http://www.linuxjournal.com/co ...

  4. python打印表格式数据-星号或注释

    python打印表格式数据,留出正确的空格,格式化打出 代码如下: def printPicnic(itemsDict,leftWidth,rightWidth): print('PICNIC ITE ...

  5. python注释、脚本参数、字节码

    python注释.脚本参数.字节码 --道心 python安装 1.下载安装包 https://www.python.org/downloads/ 2.安装 默认安装路径:C:\python27 3. ...

  6. Python数据库备份脚本

    Python数据库备份脚本 #!/usr/bin/env python # author: liudong # -*- coding: utf-8 -*- # filename: db_bak.py ...

  7. SQL SERVER 生成建表脚本

    /****** Object: StoredProcedure [dbo].[GET_TableScript_MSSQL] Script Date: 06/15/2012 11:59:00 ***** ...

  8. SQL SERVER 生成MYSQL建表脚本

    /****** Object: StoredProcedure [dbo].[GET_TableScript_MYSQL] Script Date: 06/15/2012 13:05:14 ***** ...

  9. SQL SERVER 生成ORACLE建表脚本

    /****** Object: StoredProcedure [dbo].[GET_TableScript_ORACLE] Script Date: 06/15/2012 13:07:16 **** ...

随机推荐

  1. SqlServer数据库表生成C# Model实体类SQL语句——补充

    在sql语句最前边加上  use[数据库名] 原链接:https://www.cnblogs.com/jhli/p/11552105.html   --[SQL骚操作]SqlServer数据库表生成C ...

  2. Redis 哨兵模式

    主从切换技术的方法是:当主服务器宕机了,需要手动将一台从服务器切换为主服务器,这就需要人工干预,这可能会造成一段时间的服务不可用. 一.哨兵模式的概述: 哨兵是一个独立的进程,作为一个进程,他会独立地 ...

  3. python继承关系中,类属性的修改

    class Grandfather(object): mylist = [] def __init__(self): pass class Father(Grandfather): pass Gran ...

  4. Nginx的优化与防盗链

    Nginx的优化与防盗链 1.隐藏版本号 2.修改用户与组 3.缓存时间 4.日志切割 5.连接超时 6.更改进程数 7.配置网页压缩 8.配置防盗链 9.fpm参数优化 1.隐藏版本号: 可以使用 ...

  5. 集合、Collection、list、set、HashSet

    一.集合的理解:将多个数据放在一起 简介: 1).可以动态保存任意多个对象,使用比较方便!2).提供了一系列方便的操作对象的方法: add.remove.set. get等 1.集合中的实现和继承图 ...

  6. linux_19

    haproxy https实现 总结tomcat的核心组件以及根目录结构 tomcat实现多虚拟主机 nginx实现后端tomcat的负载均衡调度 简述memcached的工作原理

  7. iOS 屏幕录制实现

    iOS 屏幕录制实现 目录 iOS 屏幕录制实现 录屏API版本变化 App内部录制屏幕 录音麦克风声音 App内部录屏直播 Bonjour APP广播端实现 广播端App(直播平台)的实现 iOS1 ...

  8. visual studio自动向量化

    //////////////////////////////////////////////////*SSE 和 AVX 每个都有16个寄存器SSE 有 XMM0 ~ XMM15,是128bitAVX ...

  9. Solution -「AGC 016F」Games on DAG

    \(\mathcal{Description}\)   Link.   给定一个含 \(n\) 个点 \(m\) 条边的 DAG,有两枚初始在 1 号点和 2 号点的棋子.两人博弈,轮流移动其中一枚棋 ...

  10. 2.go-GIN快速入门

    一.go mod安装 1.为什么要安装go mod 在项目中需要某个依赖包,必须使用go get安装,否则运行go run main.go会报错.这种方式在依赖包较多时不便于管理,于是在go1.11版 ...