python 生产数据表脚本
# -*- 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 生产数据表脚本的更多相关文章
- python打印表格式数据,留出正确的空格和段落星号或注释
python打印表格式数据,留出正确的空格,格式化打出 代码如下: def printPicnic(itemsDict,leftWidth,rightWidth): print('PICNIC ITE ...
- python编写shell脚本详细讲解
python编写shell脚本详细讲解 那,python可以做shell脚本吗? 首先介绍一个函数: os.system(command) 这个函数可以调用shell运行命令行command并且返回它 ...
- 用 Python 替代 Bash 脚本(转)
add by zhj: 其实作者是想说用Python来做那些Bash实现起来比较麻烦的部分,即将Bash与Python结合使用. 英文原文:http://www.linuxjournal.com/co ...
- python打印表格式数据-星号或注释
python打印表格式数据,留出正确的空格,格式化打出 代码如下: def printPicnic(itemsDict,leftWidth,rightWidth): print('PICNIC ITE ...
- python注释、脚本参数、字节码
python注释.脚本参数.字节码 --道心 python安装 1.下载安装包 https://www.python.org/downloads/ 2.安装 默认安装路径:C:\python27 3. ...
- Python数据库备份脚本
Python数据库备份脚本 #!/usr/bin/env python # author: liudong # -*- coding: utf-8 -*- # filename: db_bak.py ...
- SQL SERVER 生成建表脚本
/****** Object: StoredProcedure [dbo].[GET_TableScript_MSSQL] Script Date: 06/15/2012 11:59:00 ***** ...
- SQL SERVER 生成MYSQL建表脚本
/****** Object: StoredProcedure [dbo].[GET_TableScript_MYSQL] Script Date: 06/15/2012 13:05:14 ***** ...
- SQL SERVER 生成ORACLE建表脚本
/****** Object: StoredProcedure [dbo].[GET_TableScript_ORACLE] Script Date: 06/15/2012 13:07:16 **** ...
随机推荐
- Java GUI 简单台球游戏模型
完成效果: 1 package com.neuedu.test; 2 3 import java.awt.Frame; 4 import java.awt.Graphics; 5 import jav ...
- 第一个OC类
1.如何声明一个类 格式 注意: 1.必须以@interface开头,@end结尾 2.成员变量的声明,必须写在@interface与@end之间的大括号中 3.方法的声明必须在{}下面,不能写在{} ...
- Mac版jdk1.6
java sdk 1.6 for mac 在苹果官网下载 https://support.apple.com/kb/DL1572?locale=zh_CN
- shell——wait与多进程并发
在脚本里用&后台打开多个子进程,用wait命令可以使这些子进程并行执行. 例1: fun1(){ while true do echo 1 sleep 1 done } fun2(){ whi ...
- SQL代码规范
1. 建表规约 1) 表中字段名称 a) 表达是否概念的字段,必须使用is_xxx的方式命名,数据类型是bit b) 小数类型为decimal,禁止使用float和double. 说 ...
- 面向对象—继承(Day19)
初识继承 继承是一种创建新类的方式,在python中新类可以继承一个或多个父类,父类又可称为基类或超类,新建的类为派生类或子类.(类与类之间的关系是什么是什么的关系.) 继承语法: class Par ...
- 实际项目中使用CompletionService提升系统性能的一次实践
随着互联网应用的深入,很多传统行业也都需要接入到互联网.我们公司也是这样,保险核心需要和很多保险中介对接,比如阿里.京东等等.这些公司对于接口服务的性能有些比较高的要求,传统的核心无法满足要求,所以信 ...
- 了解MySQL存储引擎工作原理
MySql数据库最大的特色就是其插件式的存储引擎架构,本文主要介绍MySql常用的存储引擎,为开发时选择合适的存储引擎提供参考. 1. MySql体系结构# 在介绍存储引擎之前先来介绍下MySql的体 ...
- [题解]UVA658 It's not a Bug, it's a Feature!
链接:http://vjudge.net/problem/viewProblem.action?id=22169 描述:有n个漏洞,m个修复漏洞的方法,每种方法耗时不一样,求修复漏洞的最短时间.每种方 ...
- 替代Tableau,思迈特软件Smartbi让Excel成为企业级自助分析平台
谈到企业级自助分析平台,大家自然会想到Tableau,在Garnter最新的BI平台魔力象限中,是这么描述Tableau的. "Tableau is a Leader in this ...