备忘,

以后写的时候可以参考。

#!/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. 标准C++(3)重载

    一.函数的重载 c++中同一作用域下能够定义同名的函数(这就叫重载),但必须满足如下要求: 1.函数的参数列表必须不同,可以使参数数量不同,也可以使参数的类型不同,甚至是参数的顺序不同. 2.函数的返 ...

  2. my购物车

    sum=0 a=input("请输入“水果”或“衣服”:") if a=="手机": while True: shop = { '蓝葡萄', '水蜜桃', '草 ...

  3. LeetCode(238) Product of Array Except Self

    题目 Given an array of n integers where n > 1, nums, return an array output such that output[i] is ...

  4. golang(go语言)调试和查看gc信息,以及gc信息解析

    这里记录一下调试golang gc的方法 启用gc打印: # GODEBUG=gctrace=1 go run ./main.go 程序启动后gc将打印如下信息: gc 65 @16.996s 0%: ...

  5. hdu 6333

    Problem Description There are n apples on a tree, numbered from 1 to n.Count the number of ways to p ...

  6. Linux学习-SELinux 初探

    什么是 SELinux 什么是 SELinux 呢?其实他是『 Security Enhanced Linux 』的缩写,字面上的意义就是安全强化的 Linux 之意! 当初设计的目标:避免资源的误用 ...

  7. python偏函数使用

    偏函数依托于python functools模块.

  8. UVa 11695 树的直径 Flight Planning

    题意: 给出一棵树,删除一条边再添加一条边,求新树的最短的直径. 分析: 因为n比较小(n ≤ 2500),所以可以枚举删除的边,分裂成两棵树,然后有这么一个结论: 合并两棵树后得到的新树的最短直径为 ...

  9. UVa 1407 树形背包 Caves

    这道题可以和POJ 2486 树形背包DP Apple Tree比较着来做. 参考题解 #include <iostream> #include <cstdio> #inclu ...

  10. 到底有没有必要兼容IE版本

    我就说两个字:"没有". 理由如下: 1.占资源空间,额外去写css hack去做页面兼容处理.(主要是增加css代码) PS:css hack 不是W3C的规范,css hack ...