使用sqlparse分析SQL语句,及自己写的SQL分析语句

简介: 备忘, 以后写的时候可以参考。 #!/usr/bin/env python # -*- coding: utf-8 -*- import sqlparse import re sql = """ create table TEST_MODULE; create t...

备忘,

以后写的时候可以参考。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sqlparse

import re


sql = """
create table TEST_MODULE;
create table TEST_MODULE
(
  MODULE_ID            NUMBER NOT NULL,
  MODULE_NAME          VARCHAR2(64) NOT NULL,
  USER_ID              VARCHAR2(32) NOT NULL, -----这是;注释---;u'哈哈'asd;fasfda
  MODULE_TYPE          VARCHAR2(16) DEFAULT '1', --hello
  PARENT_MODULE_ID     NUMBER DEFAULT 1,
  SORT                 NUMBER(10) DEFAULT 1,
  CREATED_BY           VARCHAR2(64),
  CREATED_DATE         DATE DEFAULT SYSDATE,
  UPDATED_BY           VARCHAR2(64),
  UPDATED_DATE         DATE--reret
);
---adfdokfd
drop table TEST_MODULE;
drop table TEST_MODULE; --strsfsdff
create table TEST_MODULE
(
  MODULE_ID            NUMBER NOT NULL,
  MODULE_NAME          VARCHAR2(64) NOT NULL,
  USER_ID              VARCHAR2(32) NOT NULL, -----这是;注释---;u'哈哈'asd;fasfda
  MODULE_TYPE          VARCHAR2(16) DEFAULT '1', --hello
  PARENT_MODULE_ID     NUMBER DEFAULT 1,
  SORT                 NUMBER(10) DEFAULT 1,
  CREATED_BY           VARCHAR2(64),
  CREATED_DATE         DATE DEFAULT SYSDATE,
  UPDATED_BY           VARCHAR2(64),
  UPDATED_DATE         DATE--reret
);
create table TEST_MODULE;
"""
for item in sqlparse.split(sql):
    print item, '@@@@@@@@@@@@'



uncomment_list ="""
create table TEST_MODULE;
create table TEST_MODULE
(
  MODULE_ID            NUMBER NOT NULL,
  MODULE_NAME          VARCHAR2(64) NOT NULL,
  USER_ID              VARCHAR2(32) NOT NULL, -----这是;注释---;u'哈哈'asd;fasfda
  MODULE_TYPE          VARCHAR2(16) DEFAULT '1', --hello
  PARENT_MODULE_ID     NUMBER DEFAULT 1,
  SORT                 NUMBER(10) DEFAULT 1,
  CREATED_BY           VARCHAR2(64),
  CREATED_DATE         DATE DEFAULT SYSDATE,
  UPDATED_BY           VARCHAR2(64),
  UPDATED_DATE         DATE--reret
);
---adfdokfd
drop table TEST_MODULE;
drop table TEST_MODULE; 
create table TEST_MODULE
(
  MODULE_ID            NUMBER NOT NULL,
  MODULE_NAME          VARCHAR2(64) NOT NULL,
  USER_ID              VARCHAR2(32) );NOT NULL, -----这是;注释---;u'哈哈'asd;fasfda
  MODULE_TYPE          VARCHAR2(16) DEFAULT '1', --hello
  PARENT_MODULE_ID     NUMBER DEFAULT 1,
  SORT                 NUMBER(10) DEFAULT 1,
  CREATED_BY           VARCHAR2(64),
  CREATED_DATE         DATE DEFAULT SYSDATE,
  UPDATED_BY           VARCHAR2(64),
  UPDATED_DATE         DATE--reret
);
create table TEST_MODULE;
"""


def trans_sql(sql_strs):
    sql_strs = sql_strs.replace("\r\n", "\n").replace("\r", "\n")
    sql_list = sql_strs.split('\n')

    sql_sts_list = []
    
    for item in sql_list:
        if len(item) == 0:
            continue
        if item.strip().startswith("--"):
            continue
        if re.search(r';\s*$', item) and not re.search(r'\)\s*;$', item):
            sql_sts_list.append(item)
        else:
            
            if len(sql_sts_list) == 0:
                sql_sts_list.append(item + "\n")
            elif sql_sts_list[len(sql_sts_list)-1].endswith(";"):
                sql_sts_list.append(item + "\n")
            else:
                sql_sts_list[len(sql_sts_list)-1] += (item + "\n")
    for index, item in enumerate(sql_sts_list):
        if re.search(r';\s*$', item):
            sql_sts_list[index] =  re.sub(r';\s*$',"", item)
        if re.search(r'\)\s*;\n$', item):
            sql_sts_list[index] =  re.sub(r'\)\s*;\n$',")", item)
    return sql_sts_list

sql_list = trans_sql(uncomment_list)

for item in sql_list:
    print item, '################'2017-01-12 17:27:47,"aguncn" <aguncn@163.com> 写道:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import multiprocessing


uncomment_list ="""
drop table TEST_MODULE;
create table TEST_MODULE
(
  MODULE_ID            NUMBER NOT NULL,
  MODULE_NAME          VARCHAR2(64) NOT NULL,
  USER_ID              VARCHAR2(32) NOT NULL, -----这是;注释---;哈哈asd;fasfda
  MODULE_TYPE          VARCHAR2(16) DEFAULT '1', --hello
  PARENT_MODULE_ID     NUMBER DEFAULT 1,
  SORT                 NUMBER(10) DEFAULT 1,
  CREATED_BY           VARCHAR2(64),
  CREATED_DATE         DATE DEFAULT SYSDATE,
  UPDATED_BY           VARCHAR2(64),
  UPDATED_DATE         DATE--reret
);
drop table TEST_MODULE;
"""
temp_content_item1 = uncomment_list.replace("\r\n", "\n")
temp_content_item2 = temp_content_item1.replace("\r", "\n")
uncomment_list = temp_content_item2.split('\n')

sql_sts_list = []
for_int = 0
for index, item in enumerate(uncomment_list):
    
    if len(item) == 0:
        continue
    if item.strip().endswith(";"):
        item = item[:-1]
        sql_sts_list.append(item)
    else:
        print len(sql_sts_list)
        sql_sts_list.append(item)
    print sql_sts_list

    
            

# print sql_sts_list

 

目录
相关文章
|
2月前
|
SQL 关系型数据库 MySQL
MySQL技能完整学习列表3、SQL语言基础——1、SQL(Structured Query Language)简介——2、基本SQL语句:SELECT、INSERT、UPDATE、DELETE
MySQL技能完整学习列表3、SQL语言基础——1、SQL(Structured Query Language)简介——2、基本SQL语句:SELECT、INSERT、UPDATE、DELETE
51 0
|
1月前
|
SQL 存储 关系型数据库
SQL的基本语法以及SQL语句的关键字的使用,SELECT、INSERT、UPDATE、DELETE、CREATE、ALTER、DROP等。
SQL的基本语法以及SQL语句的关键字的使用,SELECT、INSERT、UPDATE、DELETE、CREATE、ALTER、DROP等。
|
15天前
|
SQL 数据库 索引
SQL索引失效原因分析与解决方案
SQL索引失效原因分析与解决方案
22 0
|
23天前
|
SQL 关系型数据库 MySQL
【MySQL】慢SQL分析流程
【4月更文挑战第1天】【MySQL】慢SQL分析流程
|
1月前
|
SQL 存储 缓存
【SQL】Mysql中一条sql语句的执行过程
【SQL】Mysql中一条sql语句的执行过程
32 0
|
1月前
|
SQL 关系型数据库 MySQL
干货!SQL性能优化,书写高质量SQL语句
干货!SQL性能优化,书写高质量SQL语句
31 2
|
2月前
|
SQL 关系型数据库 MySQL
10个SQL中常用的分析技巧
10个SQL中常用的分析技巧
|
2月前
|
SQL 存储 关系型数据库
MySQL(终结篇二)- SQL 语句分析与优化
MySQL(终结篇二)- SQL 语句分析与优化
87 0
|
3月前
|
SQL
leetcode-SQL-550. 游戏玩法分析 IV
leetcode-SQL-550. 游戏玩法分析 IV
22 1
|
3月前
|
SQL
leetcode-SQL-1084. 销售分析III
leetcode-SQL-1084. 销售分析III
30 0