使用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条 ...
随机推荐
- JS - encodeURI与encodeURIComponent的区别
encodeURI(String)主要用于整个URI(例如,http://www.jxbh.cn/illegal value.htm),而encodeURIComponent(String)主要用于对 ...
- 896. Monotonic Array
An array is monotonic if it is either monotone increasing or monotone decreasing. An array A is mono ...
- pandas处理较大数据量级的方法 - chunk,hdf,pkl
前情提要: 工作原因需要处理一批约30G左右的CSV数据,数据量级不需要hadoop的使用,同时由于办公的本本内存较低的缘故,需要解读取数据时内存不足的原因. 操作流程: 方法与方式:首先是读取数据, ...
- leetcode-11-dfs
DFS算法: explore(G, v) visited(v) = trueprevisit(v) for each edge(v, u) in E: if not visited(u): explo ...
- logging记录了其他操作的问题
做atm作业的时候,记录转账操作的那个功能的文件里,同时也记录了增加账号和冻结账号的操作 2018-11-28 17:14:51,754 : transfer : INFO : 用户edward向用户 ...
- python数据类型之集合(set)和其常用方法
集合是一个无序的,不重复的数据组合 作用(集合的重点):1.去重,把一个列表变成集合就自动去重了2.关系测试,测试两组数据库之前的交集.差集.并集等关系 s = {1, 1, 2, 2, 3, 4, ...
- JAVA基础篇—模拟服务器与客户端通信
第一种: 客户端class Client package 服务器发送到客户端; import java.io.BufferedReader; import java.io.InputStreamRea ...
- vijos--繁华的都市
描述 城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造.城市C的道路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个交叉路口之间最多有一条道路 ...
- Linux学习-编译前的任务:认识核心与取得核心原始码
什么是核心 (Kernel) Kernel 其实核心就是系统上面的一个文件而已, 这个文件包含了驱动主机各项硬 件的侦测程序与驱动模块. 核心文件通常被放置成 /boot/vmlinuz-xxx ,不 ...
- POJ 3241 曼哈顿距离最小生成树 Object Clustering
先上几个资料: 百度文库有详细的分析和证明 cxlove的博客 TopCoder Algorithm Tutorials #include <cstdio> #include <cs ...