使用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条 ...
随机推荐
- IntelliJ IDEA 配置 Tomcat 运行web项目
运行前提: 配置好 Java 的运行环境 配置好 Tomcat 安装 IntelliJ IDEA 开始 1.创建项目并配置 关于配置SDK,等建完项目再说 没有配置SDK的话 会出现下面的弹框,点击 ...
- Lecture 3
surface models 1. The two main methods of creating surface models are interpolation and triangulatio ...
- python3爬取”理财大视野”中的股票,并分别写入txt、excel和mysql
需求:爬取“理财大视野”网站的排名.代码.名称.市净率.市盈率等信息,并分别写入txt.excel和mysql 环境:python3.6.5 网站:http://www.dashiyetouzi.co ...
- linux 安装elasticsearch
一.检测是否已经安装的elasticsearch ps aux|grep elasticsearch. 二.下载elasticsearch.tar.gz并上传至服务器usr/local/文件夹下 三. ...
- UIAutomator输入中文
之前一直是英文的测试环境,包括手机也是英文的,app也是英文的,涉及不到中文输入法的东西.但现在在写中文的app,所以需要输入中文.看到网上的解决办法如下: 下载https://github.com/ ...
- luogu2564 [SCOI2009]生日礼物
排序枚举左端点,则右端点必定不降 #include <algorithm> #include <iostream> #include <cstring> #incl ...
- Python_Virtualenv及Pycharm配置
Virtualenv存在的意义 在Python使用过程中,你是否有遇到过同时需要开发多个应用的情况? 假设A应用需要使用DJango1.X版本,而B应用需要使用DJango2.X的版本,而你全局开发环 ...
- Python socket粘包问题(最终解决办法)
套接字: 就是将传输层以下的协议封装成子接口 对于应用程序来说只需调用套接字的接口,写出的程序自然是遵循tcp或udp协议的 实现第一个功能个:实现:通过客户端向服务端发送命令,调取windows下面 ...
- TOJ3031: Multiple bfs
3031: Multiple Time Limit(Common/Java):2000MS/6000MS Memory Limit:65536KByte Total Submit: 60 ...
- API生命周期第二阶段——设计:采用swagger进行API描述、设计
本篇博客主要是以swagger为依托,介绍API生命周期的第二个阶段--设计!在详细介绍之前,我必须声明一点:如果是想了解swagger和项目框架的集成的,这里没有.我要介绍的swagger进行的AP ...