备忘,

以后写的时候可以参考。

#!/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. 【NOIP2017提高组模拟7.3】B

    树上路径统计,点分治解决. 统计一段区间,naive地用了set解决,这样的复杂度是O(nlog^2n)的 考场代码出了个问题,统计答案时找到了之前的最优答案,但是没有加上新的一段,导致60分 #in ...

  2. 阿里云服务器 - node启动服务的时候只有监听内网IP才可以供外网访问

    阿里云服务器 - node启动服务的时候只有监听内网IP才可以供外网访问

  3. 201621123080《JAVA程序设计》第八周学习总结

    作业08-集合 1. 本周学习总结 2. 书面作业 1. ArrayList代码分析 1.1 解释ArrayList的contains源代码 根据代码,首先在源数组里找到下标,若下标符合>=0 ...

  4. VMware12全新安装CentOS-6.9模板机(已优化)

    1.从安装系统开始准备 安装中添加网卡 eth0 ip 10.0.0.210 netmask 24 gateway 10.0.0.254 DNS servers 223.5.5.5 eth1 ip 1 ...

  5. Python数据分析【炼数成金15周完整课程】

    点击了解更多Python课程>>> Python数据分析[炼数成金15周完整课程] 课程简介: Python是一种面向对象.直译式计算机程序设计语言.也是一种功能强大而完善的通用型语 ...

  6. poj--1064

    题意:有N条绳子,它们的长度分别为Li.如果从它们中切割出K条长度相同的绳子的话,这K条绳子最长能有多长?答案保留到小数点后2位. 思路:这些最大最小化问题大多数可以用二分查找的方法来解题 用 d 表 ...

  7. python format 用法详解

    format 用法详解 不需要理会数据类型的问题,在%方法中%s只能替代字符串类型 单个参数可以多次输出,参数顺序可以不相同 填充方式十分灵活,对齐方式十分强大 官方推荐用的方式,%方式将会在后面的版 ...

  8. Centos7 install Openstack Juno (RDO) (转载)

    原文地址:http://www.hdume.com/centos-7-0%E5%AE%89%E8%A3%85openstack/ 1.安装系统,Centos7镜像采用CentOS-7.0-1406-x ...

  9. luogu2740 [USACO4.2]草地排水Drainage Ditches 最大流EK

    练一下最大流 #include <iostream> #include <cstring> #include <cstdio> #include <queue ...

  10. day03_10 注释及简单的用户输入输出

    单行注释# print ("我爱北京天安门") print ("我爱北京天安门") #print ("我爱北京天安门") #print (& ...