使用sqlparse分析SQL语句,及自己写的SQL分析语句
备忘,
以后写的时候可以参考。
#!/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分析语句的更多相关文章
- SQL SERVER全面优化-------写出好语句是习惯
前几篇文章已经从整体提供了诊断数据库的各个方面问题的基本思路...也许对你很有用,也许你觉得离自己太远.那么今天我们从语句的一些优化写法及一些简单优化方法做一个介绍.这对于很多开发人员来说还是很有用的 ...
- {MySQL的逻辑查询语句的执行顺序}一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析
MySQL的逻辑查询语句的执行顺序 阅读目录 一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析 一 SEL ...
- 技术分析 | 浅谈在MySQL体系下SQL语句是如何在系统中执行的及可能遇到的问题
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 SQL语句大家并不陌生,但某种程度上来看,我们只是知道了这条语句是什么功能,它可 ...
- 优化SQL查询:如何写出高性能SQL语句
1. 首先要搞明白什么叫执行计划? 执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生的,比如一条SQL语句如果用来从一个 10万条记录的表中查1条 ...
- 转>>在同一个sql语句中如何写不同条件的count数量
今天在做Portal中的Dashboard展现的时候,需要对多个统计字段做展现,根据我现在的掌握水平,我只能在sql调用构建器中实现一种sql语 句返回的resultSet做展现.没有办法,只能从数据 ...
- 在数据库里面有这么一个表:用m代表男,用f代表女,现在我要输出格式为中文的:男和女,sql语句该怎么写
在数据库里面有这么一个表:用m代表男,用f代表女,现在我要输出格式为中文的:男和女, sql语句该怎么写 select case sex when 'm' then '男' else '女' a ...
- SQL语句利用日志写shell
outfile被禁止,或者写入文件被拦截: 在数据库中操作如下:(必须是root权限) show variables like '%general%'; #查看配置 set global genera ...
- dml语句就是你常写的sql语句,增删改查
dml语句就是你常写的sql语句,增删改查
- 优化 SQL 查询:如何写出高性能SQL语句
1. 首先要搞明白什么叫执行计划? 执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生的,比如一条SQL语句如果用来从一个 10万条记录的表中查1条 ...
- Sql Server 优化 SQL 查询:如何写出高性能SQL语句
1. 首先要搞明白什么叫执行计划? 执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生的,比如一条SQL语句如果用来从一个 10万条记录的表中查1条 ...
随机推荐
- Python爬虫系列-Urllib库详解
Urllib库详解 Python内置的Http请求库: * urllib.request 请求模块 * urllib.error 异常处理模块 * urllib.parse url解析模块 * url ...
- 11Vim文本编辑器
Vim文本编辑器 在Linux系统中一切都是文件,而配置一个服务就是在修改其配置文件的参数. Vim提供了三种模式:命令模式.输入模式.末行模式 1.命令模式 每次运行Vim编辑器时,默认进入命令模式 ...
- 【nginx】nginx.sh nginx 安装脚本
#! /bin/shcd /usr/local/srcwget http://nginx.org/download/nginx-1.10.1.tar.gzecho 'download success' ...
- Linux下open函数、read函数、write函数记录
open() #include<sys/types.h> #include<sys/stat.h> #include<fcntl.h> int open( cons ...
- RQNOJ:PID30 / [stupid]愚蠢的矿工☆(树形背包)
PID30 / [stupid]愚蠢的矿工☆ 背景 Stupid 家族得知在HYC家的后花园里的中央花坛处,向北走3步,向西走3步,再向北走3步,向东走3步,再向北走6步,向东走3步,向南走12步,再 ...
- PYday15--面向对象的进阶:集成、成员、方法、异常处理
1.继承 实例: 2.构造方法: 3.反射:以字符串的形式去模块操作其成员. 成员: 最外层是文件,文件里面包含类,通过类可以创建对象,对象可以封装字段和指针.类里面可以有方法,指针可以指向方法. 通 ...
- 在O(1)时间内删除链表结点 【微软面试100题 第六十题】
题目要求: 给定链表的头指针和一个结点指针,在O(1)时间删除该结点. 参考资料:剑指offer第13题. 题目分析: 有几种情况: 1.删除的结点是头结点,且链表不止一个结点: 2.删除的结点是头结 ...
- ora flashback详解
使用oracle数据库时,难免会碰到一些问题. 例:1.如何回滚已经commit了的数据 2.如何查询已经被覆盖掉的数据[update],或者被delete了的数据 3.如何将数据恢复到某个时间点 我 ...
- TOJ1698: Balanced Lineup
Description For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line up in the same ...
- C遇到的编译错误整理
1: Permission denied collect2.exe: error: ld returned exit status c:/mingw/bin/../lib/gcc/mingw32/6. ...