• python:sql建表语句转换为json


    第一种sql格式:

      1 CREATE TABLE
      2     prpcitem_car
      3     (
      4         proposalno CHAR(22) NOT NULL,
      5         itemno DECIMAL(8,0) NOT NULL,
      6         riskcode CHAR(3) NOT NULL,
      7         insuredtypecode CHAR(2),
      8         carinsuredrelation CHAR(1),
      9         clausetype CHAR(3),
     10         licenseno VARCHAR(20),
     11         licensetype CHAR(3),
     12         licensecolorcode CHAR(2),
     13         nonlocalflag CHAR(1),
     14         licenseflag CHAR(1),
     15         vehicletype CHAR(4),
     16         carkindcode CHAR(3),
     17         hkflag CHAR(1),
     18         hklicenseno CHAR(20),
     19         engineno VARCHAR(30),
     20         vinno VARCHAR(18),
     21         frameno VARCHAR(30),
     22         runareacode CHAR(10),
     23         runareaname VARCHAR(60),
     24         runmiles DECIMAL(14,2),
     25         enrolldate DATE,
     26         useyears DECIMAL(15,255),
     27         vehiclecategory CHAR(3),
     28         columvehiclecategoryn_68 CHAR(3),
     29         modelcodealias VARCHAR(100),
     30         modelcode CHAR(14),
     31         brandname VARCHAR(200) NOT NULL,
     32         aliasname VARCHAR(100),
     33         countrynature CHAR(2),
     34         countrycode CHAR(3),
     35         usenaturecode CHAR(3),
     36         businessclasscode CHAR(1),
     37         seatcount DECIMAL(15,255),
     38         toncount DECIMAL(10,3),
     39         exhaustscale DECIMAL(8,4),
     40         cylindercount INTEGER,
     41         iscriterion INTEGER,
     42         lossratio CHAR(5),
     43         salesname VARCHAR(50),
     44         salesnumber VARCHAR(20),
     45         salesphone VARCHAR(15),
     46         carcounts INTEGER,
     47         isdropinvisitinsure INTEGER,
     48         carloteququality DECIMAL(14,2),
     49         colorcode CHAR(6),
     50         safedevice CHAR(30),
     51         coefficient1 DECIMAL(8,4),
     52         coefficient2 DECIMAL(8,4),
     53         coefficient3 DECIMAL(8,4),
     54         othernature VARCHAR(10),
     55         ratecode CHAR(8),
     56         rationname VARCHAR(60),
     57         makedate DATE,
     58         carusage VARCHAR(20),
     59         currency CHAR(3),
     60         purchaseprice DECIMAL(14,2),
     61         actualvalue DECIMAL(14,2),
     62         invoiceno CHAR(20),
     63         carloanflag CHAR(1),
     64         cardealercode CHAR(16),
     65         cardealername VARCHAR(120),
     66         remark VARCHAR(40),
     67         carid CHAR(10),
     68         versionno CHAR(4),
     69         monopolyflag CHAR(1),
     70         monopolycode VARCHAR(22),
     71         monopolyname VARCHAR(80),
     72         newcarflag CHAR(1),
     73         loanvehicleflag CHAR(1),
     74         transfervehicleflag CHAR(1),
     75         transferdate DATE,
     76         operationarea VARCHAR(5),
     77         inserttimeforhis DATETIME YEAR TO SECOND,
     78         operatetimeforhis DATETIME YEAR TO SECOND,
     79         startsitename VARCHAR(255),
     80         discounttype VARCHAR(255),
     81         drivertype VARCHAR(255),
     82         endsitename VARCHAR(255),
     83         carcusttype CHAR(2),
     84         nodamageyears VARCHAR(4),
     85         modeldemandno VARCHAR(50),
     86         energytype CHAR(1),
     87         fueltype CHAR(2),
     88         carprooftype CHAR(2),
     89         carproofno CHAR(50),
     90         carproofdate DATE,
     91         certificatedate DATE,
     92         isremote CHAR(1),
     93         fullendor CHAR(1),
     94         issilageharvester CHAR(1),
     95         flag CHAR(10),
     96         licenseno1 CHAR(10),
     97         licenseno2 VARCHAR(20),
     98         licenseno3 CHAR(10),
     99         vehiclebrand VARCHAR(20),
    100         vehicletypedescription VARCHAR(5),
    101         groupcode VARCHAR(50),
    102         groupstartdate DATE,
    103         groupenddate DATE,
    104         PRIMARY KEY (proposalno, itemno) CONSTRAINT pk_citem_car,
    105         FOREIGN KEY (proposalno) REFERENCES prpcmain (proposalno) CONSTRAINT fkb28a3afd9b27a158
    106     );
    View Code

    对应python语句:

     1 import json
     2 def get_list(sqlLines):
     3     list =[]
     4     str =''
     5     table_name=''
     6     primary_key=''
     7     foreign_key=''
     8     for line in sqlLines:
     9         if 'PRIMARY KEY' in line:
    10             primary_key=line[line.find('(')+1:line.find(')')]
    11         if 'FOREIGN KEY' in line:
    12             foreign_key=line[line.find('(')+1:line.find(')')]
    13         str+=line
    14     list.append(str)
    15     list.append(primary_key)
    16     list.append(foreign_key)
    17     return list
    18 
    19 def get_json(list):
    20     str=list[0]
    21     primary_key=list[1]
    22     foreign_key=list[2]
    23     table_name=str[str.find('CREATE TABLE')+len('CREATE TABLE'):str.find('(')].strip()
    24     str= str[str.find('(')+1:str.rfind(')')].strip()
    25     str =str.lower()
    26     str =str.replace(' not null','').strip()
    27     if 'primary key' in str:
    28         str=str[0:str.find('primary key')]
    29     if 'foreign key' in str:
    30         str=str[0:str.find('foreign key')]
    31     if 'datetime year to second' in str:
    32         str= str.replace('datetime year to second','string')
    33 
    34     str_lines =str.splitlines(False)
    35     json_list=[]
    36     for line in str_lines:
    37         json_dict={}
    38         lines =line.split()
    39         if len(lines)>=2:
    40             name=lines[0]
    41             type=lines[1][0:len(lines[1])-1]
    42             json_dict['name']=name
    43 
    44             if 'date' in type:
    45                 type='string'
    46             if 'decimal' in type:
    47                  type='string'
    48             json_dict['type']=type
    49             if name in primary_key:
    50                 json_dict['primary']=1
    51             if name in foreign_key:
    52                 json_dict['foreign']=1
    53         else:
    54             continue
    55         json_list.append(json_dict)
    56     return json_list
    57 
    58 
    59 
    60 def load():
    61     sqlStr =open('C:/Users/Administrator.PC--20150529IGF/Desktop/prpcitem_car.txt')
    62     sqlLines =sqlStr.readlines(100000)
    63     sql_list =get_list(sqlLines)
    64     str =get_json(sql_list)
    65     jsonS =json.dumps(str)
    66     print(jsonS)
    67 load()
    View Code

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

    第二种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)
    View Code

    对应python语句:

     1 import json
     2 
     3 def cleanSql(lines):
     4     list=[]
     5     str =''
     6     table_name=''
     7     primary_key=''
     8     for line in lines:
     9         if 'CREATE TABLE' in line:
    10             table_name=line[line.find('."')+1:line.rfind('"')]
    11         if 'PRIMARY KEY' in line:
    12             primary_key=line[line.find('"')+1:line.rfind('"')]
    13         str += line
    14     str = str.lower()
    15     if str.startswith('create table') is False:
    16         str =str[str.index('create table'):len(str)]
    17     if 'primary key' in str:
    18         str=str[0:str.find('primary key')]
    19     if 'foreign key' in str:
    20         str=str[0:str.find('foreign key')]
    21     str= str[str.index('(')+1:]
    22     if 'not null' in str:
    23         str=str.replace('not null','')
    24     list.append(table_name)
    25     list.append(primary_key.lower())
    26     list.append(str)
    27     return list
    28 
    29 def changeType(type):
    30     stype=type
    31     if 'character' in type:
    32         stype ='string'
    33     if 'date' in type:
    34         stype= 'string'
    35     if 'decimal' in type:
    36         stype= 'string'
    37     return stype
    38 
    39 def get_json(list):
    40    primary_key=list[1]
    41    str =list[2]
    42    lines= str.splitlines(False)
    43    json_list=[]
    44    for line in lines:
    45        json_dict={}
    46        name=line[line.find('"')+1:line.rfind('"')].strip()
    47        type=line[line.rfind('"')+1:line.find(',')].strip()
    48        type =changeType(type)
    49        json_dict['type']=type
    50        json_dict['name']=name
    51        if primary_key==name:
    52             json_dict['primary']=1
    53        if len(name)==0:
    54            continue
    55        json_list.append(json_dict)
    56    return json_list
    57 
    58 def load():
    59     schema=open('C:/Users/Administrator.PC--20150529IGF/Desktop/data/data/lis/llcase/full/20170401_09_37_01/schema.sql')
    60     sqlStr =schema.readlines(100000)
    61     list=cleanSql(sqlStr)
    62 
    63     jsonStr =get_json(list)
    64     jsonS =json.dumps(jsonStr)
    65     print(jsonS)
    66 load()
    View Code
  • 相关阅读:
    git
    浏览器喧嚷过程
    B/S架构与C/S架构
    simpleDateFormat
    oracle中case when的用法
    Java程序利用Jdbc连接数据库
    List 和 Set与Map
    队列和栈
    toString方法分析
    java中的构造器
  • 原文地址:https://www.cnblogs.com/hy928302776/p/6770663.html
Copyright © 2020-2023  润新知