备忘,

以后写的时候可以参考。

#!/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

使用sqlparse分析SQL语句,及自己写的SQL分析语句的更多相关文章

  1. SQL SERVER全面优化-------写出好语句是习惯

    前几篇文章已经从整体提供了诊断数据库的各个方面问题的基本思路...也许对你很有用,也许你觉得离自己太远.那么今天我们从语句的一些优化写法及一些简单优化方法做一个介绍.这对于很多开发人员来说还是很有用的 ...

  2. {MySQL的逻辑查询语句的执行顺序}一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析

    MySQL的逻辑查询语句的执行顺序 阅读目录 一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析 一 SEL ...

  3. 技术分析 | 浅谈在MySQL体系下SQL语句是如何在系统中执行的及可能遇到的问题

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 SQL语句大家并不陌生,但某种程度上来看,我们只是知道了这条语句是什么功能,它可 ...

  4. 优化SQL查询:如何写出高性能SQL语句

    1. 首先要搞明白什么叫执行计划? 执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生的,比如一条SQL语句如果用来从一个 10万条记录的表中查1条 ...

  5. 转>>在同一个sql语句中如何写不同条件的count数量

    今天在做Portal中的Dashboard展现的时候,需要对多个统计字段做展现,根据我现在的掌握水平,我只能在sql调用构建器中实现一种sql语 句返回的resultSet做展现.没有办法,只能从数据 ...

  6. 在数据库里面有这么一个表:用m代表男,用f代表女,现在我要输出格式为中文的:男和女,sql语句该怎么写

    在数据库里面有这么一个表:用m代表男,用f代表女,现在我要输出格式为中文的:男和女, sql语句该怎么写 select  case sex when 'm' then '男' else '女'   a ...

  7. SQL语句利用日志写shell

    outfile被禁止,或者写入文件被拦截: 在数据库中操作如下:(必须是root权限) show variables like '%general%'; #查看配置 set global genera ...

  8. dml语句就是你常写的sql语句,增删改查

    dml语句就是你常写的sql语句,增删改查

  9. 优化 SQL 查询:如何写出高性能SQL语句

    1. 首先要搞明白什么叫执行计划? 执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生的,比如一条SQL语句如果用来从一个 10万条记录的表中查1条 ...

  10. Sql Server 优化 SQL 查询:如何写出高性能SQL语句

    1. 首先要搞明白什么叫执行计划? 执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生的,比如一条SQL语句如果用来从一个 10万条记录的表中查1条 ...

随机推荐

  1. 使用jquery清除select中的所有option

    html代码 <select id="search"> <option>baidu</option> <option>sogou&l ...

  2. 【Maven】 (请使用 -source 8 或更高版本以启用 lambda 表达式)

    在使用mvn install编译maven项目时,报了 “ (请使用 -source 8 或更高版本以启用 lambda 表达式)”错误,是因为设置的maven默认jdk编译版本太低的问题. 可使用两 ...

  3. ccf 201712-3 Crontab(Python实现)

    一.原题 问题描述 试题编号: 201712-3 试题名称: Crontab 时间限制: 10.0s 内存限制: 256.0MB 问题描述: 样例输入 3 201711170032 201711222 ...

  4. spartan6不能直接把时钟连到IO上

    1.问题的提出:spartan6中不允许时钟信号直接连到IO口上面? 2.解决办法: ODDR2的使用 ODDR2Primitive: Double Data Rate Output D Flip-F ...

  5. golang http 中间件

    golang http 中间件 源码链接 golang的http中间件的实现 首先实现一个http的handler接口 type Handler interface { ServeHTTP(Respo ...

  6. python基本操作(五)

    if 判断 if 条件: 代码1 代码2 代码3 代码块(同一缩进级别的代码,例如代码1.代码2和代码3是相同缩进的代码,这三个代码组合在一起就是一个代码块,相同缩进的代码会自上而下的运行) cls ...

  7. POJ:2955-Brackets(经典:括号匹配)

    传送门:http://poj.org/problem?id=2955 Brackets Time Limit: 1000MS Memory Limit: 65536K Description We g ...

  8. net clr via c sharp chap1-- note

    Tag-> 托管代码 Tag-> .NET Framework 系统环境检测 Tag-> 设置平台 Tag-> 查询64或32位机 Tag-> IL编译成机器指令 Tag ...

  9. vi 编辑器命令

    插入命令 a append after the cursor A append after the current line i insert before the cursor I insert b ...

  10. luogu2698 [USACO12MAR]花盆Flowerpot

    单调队列+二分答案 #include <algorithm> #include <iostream> #include <cstring> #include < ...