使用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条 ...
随机推荐
- percona-toolkit工具使用介绍
percona-toolkit工具使用介绍 1. pt-heartbeat 1.1 pt-heartbeat 原理 1.2 pt-heartbeat 主要参数介绍 1.3 pt-heartbeat 实 ...
- Mybatis 循环 foreach, 批量操作
mapper.java: int modifySortOfGoods(@Param("idlist") List<String> goodsIds, @Param(&q ...
- 【Kafka】搭建和测试等问题
1.安装启动kafka #跳转到下载目录cd /opt/setup # 下载安装包 wget http://mirror.bit.edu.cn/apache/kafka/0.10.2.0/kafka_ ...
- Linux远程传输命令scp
指令:scp在不同的linux主机间复制文件带有Security的文件copy,基于ssh登录. 有些linux发行版没有自带scp,因此需要安装scp# yum -y install openssh ...
- MySQL 创建函数失败提示1418
MySQL 创建函数失败提示1418 在创建函数时,往往会遇到创建函数失败的情形,除去书写的创建函数的sql语句本身语法错误之外,还会碰到一个错误就是, 1418:This function has ...
- 有关fcrackzip的使用介绍(来自网络)
本文转自:http://longxiaz.blog.163.com/blog/static/131452420201282844545197/ 主要用到的工具是fcrackzip.别的工具没去测试,f ...
- JAVA基础篇—继承
父类Vehicle package com.car; public class Vehicle { final String brand;// String color;// double speed ...
- ACM-ICPC 2018 沈阳赛区网络预赛 F. Fantastic Graph(有源上下界最大流 模板)
关于有源上下界最大流: https://blog.csdn.net/regina8023/article/details/45815023 #include<cstdio> #includ ...
- 03011_HttpServletRequest
1.HttpServletRequest概述 (1)我们在创建Servlet时会覆盖service()方法,或doGet()/doPost(),这些方法都有两个参数,一个为代表请求的request和代 ...
- win7 64位旗舰版下载
http://www.itqnh.com/deepin/win7-64.html mac windows https://help.apple.com/bootcamp/assistant/6.0 ...