详解python校验SQL脚本命名规则


Posted in Python onMarch 22, 2019

需求背景

检查脚本文件中SQL语句是否按规范编写,规则如下:

  1. 创建表时,表名称需以"t_"开头且均为小写
  2. 增加和创建列时,列名称均为小写字母和_组成
  3. 创建函数,函数名称需以"f_"开头
  4. 创建存储过程,存储过程名称需以"p_"开头
  5. 创建索引,索引名称需以"idx_"开头
  6. 创建视图,视图名称需以"v_"开头

需求分析

首先要从脚本文件中提取出来表名称、列名称、函数名称、存储过程名称、索引名称、视图名称
这里需要使用python 相应的re和os模块
分别创建相应的规则,相应的名称依次分别进行校验,返回信息和具体提示

代码实现

以校验表名称为例 文本内容如下;

-- mysql创建view、trigger、function、procedure、event时都会定义一个Definer
-- 更新中!!!!!!!!!!!!!
CREATE TABLE `t_auth_group_permissions` (
create table t_business_apply_reback(
CREATE TABLE `t_exception_record` (
CREATE TABLE `t_lend_channel_insurance_company` (

alter table hb_product.admit_params add column originalid varchar(80);
alter table hb_product.admit_params_detail add column originalid varchar(80);

第一步——提取表名称

def get_result(rec, str):
  """
  :param rec: 匹配规则
  :param str: 匹配的对象
  :return: 查询的结果
  """
  result = re.findall(rec, str)
  return result

def get_table_names(str):
  """
  提取表名称返回数组
  :param str:
  :return:
  """
  table_name_rc1 = re.compile(r'CREATE TABLE [\S]*?(\w+)[\S].*\(', flags=re.I)
  result_table_name = get_result(table_name_rc1, str) + get_result(table_name_rc2, str)
  return result_table_name
  1. flags=re.I 匹配时忽略大小写,因为我们的表的创建语句CREATE TABLE或create table t_business_apply_reback
  2. \w 匹配字母数字下划线
  3. \S 匹配任意空字符
  4. [] 用来表示一组字符
  5. () 匹配括号内的表达式
  6. * 匹配0个或多个
  7. . 匹配任意字符除了换行符
  8. ? 匹配0个或多个,非贪婪模式

运行效果如下:

详解python校验SQL脚本命名规则

第二步——表名称匹配

def is_match_t(strs):

  """
  表名称规则校验:t_开头小写字母和下划线
  :param strs:
  :return: 1通过,0不通过,msg返回信息
  """
  code, msg = 1, '验证通过'
  for i in strs:
    if re.match(r'^t_[a-z_]+$', i) is None:
      return 0, '创建表名称:' + i + '不符合命名规范,请仔细检查!'
  return code, msg
  1. ^ 匹配字符串的开头
  2. $ 匹配字符串的结尾
  3. [a-z_] 匹配小写字母和下划线

 运行效果如下:

详解python校验SQL脚本命名规则

以上所述是小编给大家介绍的python校验SQL脚本命名规则详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python中线程编程之threading模块的使用详解
Jun 23 Python
Python的GUI框架PySide的安装配置教程
Feb 16 Python
Python 获得命令行参数的方法(推荐)
Jan 24 Python
python 脚本生成随机 字母 + 数字密码功能
May 26 Python
对python Tkinter Text的用法详解
Oct 11 Python
Python3爬虫学习入门教程
Dec 11 Python
在Python运行时动态查看进程内部信息的方法
Feb 22 Python
使用Python快乐学数学Github万星神器Manim简介
Aug 07 Python
Pytorch训练过程出现nan的解决方式
Jan 02 Python
使用Tensorflow实现可视化中间层和卷积层
Jan 24 Python
详解Python爬虫爬取博客园问题列表所有的问题
Jan 18 Python
python实现简单反弹球游戏
Apr 12 Python
pymongo中group by的操作方法教程
Mar 22 #Python
Python常用特殊方法实例总结
Mar 22 #Python
pymongo中聚合查询的使用方法
Mar 22 #Python
OpenCV HSV颜色识别及HSV基本颜色分量范围
Mar 22 #Python
基于OpenCV python3实现证件照换背景的方法
Mar 22 #Python
详解Python给照片换底色(蓝底换红底)
Mar 22 #Python
详解python-图像处理(映射变换)
Mar 22 #Python
You might like
ADODB结合SMARTY使用~超级强
2006/11/25 PHP
PHP输出九九乘法表代码实例
2015/03/27 PHP
PHP简单生成缩略图相册的方法
2015/07/29 PHP
PHP上传图片类显示缩略图功能
2016/06/30 PHP
PHP实现对二维数组某个键排序的方法
2016/09/14 PHP
JS控件autocomplete 0.11演示及下载 1月5日已更新
2007/01/09 Javascript
HTA版JSMin(省略修饰语若干)基于javascript语言编写
2009/12/24 Javascript
IE6 弹出Iframe层中的文本框“经常”无法获得输入焦点
2009/12/27 Javascript
google 搜索框添加关键字实现代码
2010/04/24 Javascript
jquery增加时编辑jqGrid(实例代码)
2013/11/08 Javascript
js+css实现导航效果实例
2015/02/10 Javascript
javascript实现捕捉键盘上按下的键
2015/05/05 Javascript
JS+CSS实现的竖向简洁折叠菜单效果代码
2015/10/22 Javascript
整理Javascript流程控制语句学习笔记
2015/11/29 Javascript
理解javascript中DOM事件
2015/12/25 Javascript
jQuery插件实现适用于移动端的地址选择器
2016/02/18 Javascript
Vue之Watcher源码解析(1)
2017/07/19 Javascript
JavaScript上传文件时不用刷新页面方法总结(推荐)
2017/08/15 Javascript
jQuery+koa2实现简单的Ajax请求的示例
2018/03/06 jQuery
JS学习笔记之数组去重实现方法小结
2019/05/29 Javascript
javascript设计模式 ? 工厂模式原理与应用实例分析
2020/04/09 Javascript
使用JavaScript实现贪吃蛇游戏
2020/09/29 Javascript
javascript this指向相关问题及改变方法
2020/11/19 Javascript
[02:50]2014DOTA2 TI预选赛预选赛 大神专访第一弹!
2014/05/21 DOTA
Windows下实现Python2和Python3两个版共存的方法
2015/06/12 Python
详解python 发送邮件实例代码
2016/12/22 Python
pytorch 自定义卷积核进行卷积操作方式
2019/12/30 Python
python使用matplotlib绘制折线图的示例代码
2020/09/22 Python
促销活动策划方案
2014/01/12 职场文书
小学红领巾中秋节广播稿
2014/01/13 职场文书
给护士表扬信
2014/01/19 职场文书
学雷锋志愿者活动总结
2014/06/27 职场文书
2015年实习单位评语
2015/03/25 职场文书
课程设计感想范文
2015/08/11 职场文书
java设计模式--三种工厂模式详解
2021/07/21 Java/Android
MySQL去除重叠时间求时间差和的实现
2021/08/23 MySQL