第一种sql格式:

 CREATE TABLE
prpcitem_car
(
proposalno CHAR(22) NOT NULL,
itemno DECIMAL(8,0) NOT NULL,
riskcode CHAR(3) NOT NULL,
insuredtypecode CHAR(2),
carinsuredrelation CHAR(1),
clausetype CHAR(3),
licenseno VARCHAR(20),
licensetype CHAR(3),
licensecolorcode CHAR(2),
nonlocalflag CHAR(1),
licenseflag CHAR(1),
vehicletype CHAR(4),
carkindcode CHAR(3),
hkflag CHAR(1),
hklicenseno CHAR(20),
engineno VARCHAR(30),
vinno VARCHAR(18),
frameno VARCHAR(30),
runareacode CHAR(10),
runareaname VARCHAR(60),
runmiles DECIMAL(14,2),
enrolldate DATE,
useyears DECIMAL(15,255),
vehiclecategory CHAR(3),
columvehiclecategoryn_68 CHAR(3),
modelcodealias VARCHAR(100),
modelcode CHAR(14),
brandname VARCHAR(200) NOT NULL,
aliasname VARCHAR(100),
countrynature CHAR(2),
countrycode CHAR(3),
usenaturecode CHAR(3),
businessclasscode CHAR(1),
seatcount DECIMAL(15,255),
toncount DECIMAL(10,3),
exhaustscale DECIMAL(8,4),
cylindercount INTEGER,
iscriterion INTEGER,
lossratio CHAR(5),
salesname VARCHAR(50),
salesnumber VARCHAR(20),
salesphone VARCHAR(15),
carcounts INTEGER,
isdropinvisitinsure INTEGER,
carloteququality DECIMAL(14,2),
colorcode CHAR(6),
safedevice CHAR(30),
coefficient1 DECIMAL(8,4),
coefficient2 DECIMAL(8,4),
coefficient3 DECIMAL(8,4),
othernature VARCHAR(10),
ratecode CHAR(8),
rationname VARCHAR(60),
makedate DATE,
carusage VARCHAR(20),
currency CHAR(3),
purchaseprice DECIMAL(14,2),
actualvalue DECIMAL(14,2),
invoiceno CHAR(20),
carloanflag CHAR(1),
cardealercode CHAR(16),
cardealername VARCHAR(120),
remark VARCHAR(40),
carid CHAR(10),
versionno CHAR(4),
monopolyflag CHAR(1),
monopolycode VARCHAR(22),
monopolyname VARCHAR(80),
newcarflag CHAR(1),
loanvehicleflag CHAR(1),
transfervehicleflag CHAR(1),
transferdate DATE,
operationarea VARCHAR(5),
inserttimeforhis DATETIME YEAR TO SECOND,
operatetimeforhis DATETIME YEAR TO SECOND,
startsitename VARCHAR(255),
discounttype VARCHAR(255),
drivertype VARCHAR(255),
endsitename VARCHAR(255),
carcusttype CHAR(2),
nodamageyears VARCHAR(4),
modeldemandno VARCHAR(50),
energytype CHAR(1),
fueltype CHAR(2),
carprooftype CHAR(2),
carproofno CHAR(50),
carproofdate DATE,
certificatedate DATE,
isremote CHAR(1),
fullendor CHAR(1),
issilageharvester CHAR(1),
flag CHAR(10),
licenseno1 CHAR(10),
licenseno2 VARCHAR(20),
licenseno3 CHAR(10),
vehiclebrand VARCHAR(20),
vehicletypedescription VARCHAR(5),
groupcode VARCHAR(50),
groupstartdate DATE,
groupenddate DATE,
PRIMARY KEY (proposalno, itemno) CONSTRAINT pk_citem_car,
FOREIGN KEY (proposalno) REFERENCES prpcmain (proposalno) CONSTRAINT fkb28a3afd9b27a158
);

对应python语句:

 import json
def get_list(sqlLines):
list =[]
str =''
table_name=''
primary_key=''
foreign_key=''
for line in sqlLines:
if 'PRIMARY KEY' in line:
primary_key=line[line.find('(')+1:line.find(')')]
if 'FOREIGN KEY' in line:
foreign_key=line[line.find('(')+1:line.find(')')]
str+=line
list.append(str)
list.append(primary_key)
list.append(foreign_key)
return list def get_json(list):
str=list[0]
primary_key=list[1]
foreign_key=list[2]
table_name=str[str.find('CREATE TABLE')+len('CREATE TABLE'):str.find('(')].strip()
str= str[str.find('(')+1:str.rfind(')')].strip()
str =str.lower()
str =str.replace(' not null','').strip()
if 'primary key' in str:
str=str[0:str.find('primary key')]
if 'foreign key' in str:
str=str[0:str.find('foreign key')]
if 'datetime year to second' in str:
str= str.replace('datetime year to second','string') str_lines =str.splitlines(False)
json_list=[]
for line in str_lines:
json_dict={}
lines =line.split()
if len(lines)>=2:
name=lines[0]
type=lines[1][0:len(lines[1])-1]
json_dict['name']=name if 'date' in type:
type='string'
if 'decimal' in type:
type='string'
json_dict['type']=type
if name in primary_key:
json_dict['primary']=1
if name in foreign_key:
json_dict['foreign']=1
else:
continue
json_list.append(json_dict)
return json_list def load():
sqlStr =open('C:/Users/Administrator.PC--20150529IGF/Desktop/prpcitem_car.txt')
sqlLines =sqlStr.readlines(100000)
sql_list =get_list(sqlLines)
str =get_json(sql_list)
jsonS =json.dumps(str)
print(jsonS)
load()

---------------------

第二种sql格式:

-- Start of generated script for 10.136.1.5-DB2-LIS (db2inst1)
-- Apr-10-2017 at 16:35:18 CREATE TABLE "DB2INST1"."LLCASE"
("CASENO" VARCHAR(20) NOT NULL,
"RGTNO" VARCHAR(20),
"RGTTYPE" VARCHAR(1) NOT NULL,
"RGTSTATE" VARCHAR(2) NOT NULL,
"CUSTOMERNO" VARCHAR(24) NOT NULL,
"CUSTOMERNAME" VARCHAR(120),
"ACCIDENTTYPE" VARCHAR(1),
"RECEIPTFLAG" VARCHAR(1),
"HOSPITALFLAG" VARCHAR(1),
"SURVEYFLAG" VARCHAR(1),
"RGTDATE" DATE,
"HANDLEDATE" DATE,
"CLAIMCALDATE" DATE,
"AFFIXGETDATE" DATE,
"FEEINPUTFLAG" VARCHAR(1),
"INHOSPITALDATE" DATE,
"OUTHOSPITALDATE" DATE,
"INVALIHOSDAYS" SMALLINT,
"INHOSPITALDAYS" SMALLINT,
"DIANOSEDATE" DATE,
"POSTALADDRESS" VARCHAR(300),
"PHONE" VARCHAR(20),
"ACCSTARTDATE" DATE,
"ACCIDENTDATE" DATE,
"ACCIDENTSITE" VARCHAR(60),
"DEATHDATE" DATE,
"CUSTSTATE" VARCHAR(2),
"ACCDENTDESC" VARCHAR(6000),
"CUSTBIRTHDAY" DATE,
"CUSTOMERSEX" VARCHAR(1),
"CUSTOMERAGE" DECIMAL(5, 0),
"IDTYPE" VARCHAR(1),
"IDNO" VARCHAR(20),
"HANDLER" VARCHAR(10),
"UWSTATE" VARCHAR(10),
"DEALER" VARCHAR(10),
"APPEALFLAG" VARCHAR(1),
"TOGETHERGET" VARCHAR(1),
"GRPDEALFLAG" VARCHAR(1),
"GETMODE" VARCHAR(2),
"GETINTV" SMALLINT,
"CALFLAG" VARCHAR(1),
"UWFLAG" VARCHAR(1),
"DECLINEFLAG" VARCHAR(1),
"ENDCASEFLAG" VARCHAR(1),
"ENDCASEDATE" DATE,
"MNGCOM" VARCHAR(10) NOT NULL,
"OPERATOR" VARCHAR(10) NOT NULL,
"MAKEDATE" DATE NOT NULL,
"MAKETIME" VARCHAR(8) NOT NULL,
"MODIFYDATE" DATE NOT NULL,
"MODIFYTIME" VARCHAR(8) NOT NULL,
"BANKCODE" VARCHAR(10),
"BANKACCNO" VARCHAR(40),
"ACCNAME" VARCHAR(120),
"CASEGETMODE" VARCHAR(2),
"ACCMODIFYREASON" VARCHAR(400),
"CASENODATE" DATE,
"CASEPROP" CHARACTER(2),
"REMARK" VARCHAR(2000),
"CANCLEREASON" CHARACTER(2),
"CANCLEREMARK" VARCHAR(500),
"CANCLER" CHARACTER(10),
"CANCLEDATE" DATE,
"RIGISTER" CHARACTER(10),
"CLAIMER" CHARACTER(10),
"UWER" CHARACTER(10),
"UWDATE" DATE,
"SIGNER" CHARACTER(10),
"SIGNERDATE" DATE,
"RISKCODE" VARCHAR(10),
"OTHERIDTYPE" VARCHAR(2),
"OTHERIDNO" VARCHAR(50),
"GRPNO" VARCHAR(20),
"GRPNAME" VARCHAR(150),
"CONTDEALFLAG" VARCHAR(1),
"MOBILEPHONE" VARCHAR(15),
"PREPAIDFLAG" VARCHAR(1),
PRIMARY KEY("CASENO")
); -- End of generated script for 10.136.1.5-DB2-LIS (db2inst1)

对应python语句:

 import json

 def cleanSql(lines):
list=[]
str =''
table_name=''
primary_key=''
for line in lines:
if 'CREATE TABLE' in line:
table_name=line[line.find('."')+1:line.rfind('"')]
if 'PRIMARY KEY' in line:
primary_key=line[line.find('"')+1:line.rfind('"')]
str += line
str = str.lower()
if str.startswith('create table') is False:
str =str[str.index('create table'):len(str)]
if 'primary key' in str:
str=str[0:str.find('primary key')]
if 'foreign key' in str:
str=str[0:str.find('foreign key')]
str= str[str.index('(')+1:]
if 'not null' in str:
str=str.replace('not null','')
list.append(table_name)
list.append(primary_key.lower())
list.append(str)
return list def changeType(type):
stype=type
if 'character' in type:
stype ='string'
if 'date' in type:
stype= 'string'
if 'decimal' in type:
stype= 'string'
return stype def get_json(list):
primary_key=list[1]
str =list[2]
lines= str.splitlines(False)
json_list=[]
for line in lines:
json_dict={}
name=line[line.find('"')+1:line.rfind('"')].strip()
type=line[line.rfind('"')+1:line.find(',')].strip()
type =changeType(type)
json_dict['type']=type
json_dict['name']=name
if primary_key==name:
json_dict['primary']=1
if len(name)==0:
continue
json_list.append(json_dict)
return json_list def load():
schema=open('C:/Users/Administrator.PC--20150529IGF/Desktop/data/data/lis/llcase/full/20170401_09_37_01/schema.sql')
sqlStr =schema.readlines(100000)
list=cleanSql(sqlStr) jsonStr =get_json(list)
jsonS =json.dumps(jsonStr)
print(jsonS)
load()

python:sql建表语句转换为json的更多相关文章

  1. 借助python工具从word文件中抽取相关表的定义,最后组装建表语句-非常好

    借助python工具从word文件中抽取表的定义,最后组装建表语句-非常好 --如有转载请以超链接的方式注明原文章出处,谢谢大家.请尊重每一位乐于分享的原创者 1.python脚本 ## -*- co ...

  2. Python导出MySQL数据库中表的建表语句到文件

    为了做数据对象的版本控制,需要将MySQL数据库中的表结构导出成文件进行版本化管理,试写了一下,可以完整导出数据库中的表结构信息 # -*- coding: utf-8 -*- import os i ...

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

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

  4. 三种常用的MySQL建表语句(转)

    MySQL建表语句是最基础的SQL语句之一,下面就为您介绍最常用的三种MySQL建表语句,如果您对MySQL建表语句方面感兴趣的话,不妨一看. 1.最简单的: CREATE TABLE t1(    ...

  5. powerDesigner的建表语句默认设置为去掉双引号

    powerDesigner的建表语句默认设置为去掉双引号,依次执行如下操作: Database ------>> Edit Current DBMS ------>> Scri ...

  6. mysql和oracle建表语句以及数据类型的区别

    1.mysql和oracle建表语句的区别 mysql DROP TABLE IF EXISTS `order`;CREATE TABLE `order` (  `id` int(11) NOT NU ...

  7. sqlite建表语句(特别是外键问题)

    原创  sqlite建表语句(特别是外键问题) 下面图表示两个表关系: //表1User_invitecreate table User_invite(Invite_id INTEGER PRIMAR ...

  8. ORACLE 建表语句(表名及字段名大写)

    ORACLE建表时如果表名或者字段名存在大小写同时存在的情况下,默认为区分大小写,此时在select/updata等操作时需要在表名或者字段名上添加双引号,否则会报"视图不存在"的 ...

  9. sqlserver 建表语句,获取建表语句的存储过程,包括排序规则,索引,字段说明,支持同时生成多个表

    先创建一个分割表名的分割函数 --表值函数用以截取字符串 --如果为其添加一列主键id,则其顺序就会固定了 create FUNCTION [Split](@text NVARCHAR(max)) ) ...

随机推荐

  1. 浏览器缓存机制(HTTP缓存机制)

    其机制是根据HTTP报文的缓存标识进行的. 过程:浏览器发起HTTP请求 – 服务器响应该请求.那么浏览器第一次向服务器发起该请求后拿到请求结果,会根据响应报文中HTTP头的缓存标识,决定是否缓存结果 ...

  2. Percona Xtrabackup对数据库进行部分备份

    Xtrabackup也可以实现部分备份,即只备份某个或某些指定的数据库或某数据库中的某个或某些表.但要使用此功能,必须启用innodb_file_per_table选项,即每张表保存为一个独立的文件. ...

  3. 【技术累积】【点】【java】【20】static关键字

    基础概念 是个修饰符: 修饰变量.常量.方法.代码块: 被修饰的为静态: 方便在没有创建对象的情况下来进行调用(方法/变量): static修饰的成员被所有的对象所共享: static优先于对象存在, ...

  4. css3基础篇二

    CSS3 边框 border-radius box-shadow border-image(ie不支持) 语法 border-radius: 1-4 length|% / 1-4 length|%; ...

  5. jquery-pjax使用说明

    pjax = pushState + ajax .--. / \ ## a a ( '._) |'-- | _.\___/_ ___pjax___ ."\> \Y/|<'. '. ...

  6. class path resource [processes/] cannot be resolved to URL because it does not exist

    springboot整合activiti时报以下错误,原因是项目启动时检查流程文件 nested exception is java.io.FileNotFoundException: class p ...

  7. Crossing Rivers UVA - 12230 概率与期望

    题目大意:有个人每天要去公司上班,每次会经过N条河,家和公司的距离为D,默认在陆地的速度为1,给出N条河的信息,包括起始坐标p,宽度L,以及船的速度v.船会往返在河的两岸,人到达河岸时,船的位置是随机 ...

  8. ADB 常用命令学习

    参考文档:https://www.cnblogs.com/bravesnail/articles/5850335.html非常感谢作者的分享,以下是我学习的记录.Android 常用adb 命令汇总- ...

  9. 有关微信小程序

    每个页面都要在app.json中配置 "pages": [ "pages/index/index", "pages/list/list", ...

  10. 【剑指Offer】53、表示数值的字符串

      题目描述:   请实现一个函数用来判断字符串是否表示数值(包括整数和小数).例如,字符串"+100", "5e2", "-123",&q ...