使用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条 ...
随机推荐
- Java的WatchService文件夹监听遇到的一些问题
打开word文档时会新增一个~$开头的同名文件,关闭时该文件自动删除 修改excel文件时,会新增一个文件名像E56B4610,CBC15610等这样的文件,同时也会产生tmp格式的文件 PPT文件修 ...
- 201621123080 《Java程序设计》第2周学习总结
Week02-Java基本语法与类库 1. 本周学习总结 本周主要学习了java的数据类型.运算符,String类,java的简单输入输出与流程控制. 在做题上对String和数组的理解与区分仍不够深 ...
- 共享服务-FTP基础(一)
介绍:文件传输协议FTP 两种模式:服务器角度 主动(PORT style):服务器主动连接 命令(控制):客户端:随机port --- 服务器:tcp21 数据:客户端:随机port ---服务 ...
- vue之列表循环
文档:https://cn.vuejs.org/v2/guide/list.html 当 Vue.js 用 v-for 正在更新已渲染过的元素列表时,它默认用“就地复用”策略.如果数据项的顺序被改变, ...
- phpstudy2016+phpstorm2017-3+xdebug+chrome
1. 勾选Xdebug 后 phpstudy 会自动重启服务 [XDebug] xdebug.profiler_output_dir="D:\phpStudy\tmp\xdebug" ...
- redis代理集群(Twemproxy)(1)
redis主从+哨兵模式只解决了读的分布式操作,大大提高了性能:但是写操作,只有主主机器才能进行,从机器无法进行写操作.此时,Twemproxy也就出现了. 这个模式单纯的安装有些复杂,需要引入很多的 ...
- MySQL迁移升级解决方案
任务背景 由于现有业务架构已不能满足当前业务需求,在保证数据完整的前提下,现需要将原有数据库迁移到另外一台单独的服务器上,在保证原有服务正常的情况下,将原有LAMP环境中mysql数据库版本5.6.3 ...
- leetcode-16-greedyAlgorithm
455. Assign Cookies 解题思路: 先将两个数组按升序排序,然后从后往前遍历,当s[j] >= g[i]的时候,就把s[j]分给g[i],i,j都向前移动,count+1;否则向 ...
- 详解Python中的相对导入和绝对导入
Python 相对导入与绝对导入,这两个概念是相对于包内导入而言的.包内导入即是包内的模块导入包内部的模块. Python import 的搜索路径 在当前目录下搜索该模块 在环境变量 PYTHONP ...
- Markdown,后缀MD
Markdown 算是一门新兴语言,现在 7-8 岁了吧.它设计的初衷就是让写字的人专注于写字,用纯文本简单的符号标记格式,最后再通过工具转换成鬼畜的 HTML/XHTML.如果你玩过 wikiped ...