详解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入门篇之面向对象
Oct 20 Python
Python编程入门的一些基本知识
May 13 Python
matplotlib 纵坐标轴显示数据值的实例
May 25 Python
python django 原生sql 获取数据的例子
Aug 14 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
Oct 24 Python
python实现输入的数据在地图上生成热力图效果
Dec 06 Python
Python 脚本的三种执行方式小结
Dec 21 Python
Python中bisect的用法及示例详解
Jul 20 Python
python对批量WAV音频进行等长分割的方法实现
Sep 25 Python
Manjaro、pip、conda更换国内源的方法
Nov 17 Python
Python的信号库Blinker用法详解
Dec 31 Python
Python还能这么玩之用Python修改了班花的开机密码
Jun 04 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
PHP提示Notice: Undefined variable的解决办法
2012/11/24 PHP
ThinkPHP的L方法使用简介
2014/06/18 PHP
PHP源码分析之变量的存储过程分解
2014/07/03 PHP
详解WordPress中简码格式标签编写的基本方法
2015/12/22 PHP
初识ThinkPHP控制器
2016/04/07 PHP
PHP二维数组去重算法
2016/12/17 PHP
php中array_fill函数的实例用法
2021/03/02 PHP
javascript 数组的方法集合
2008/06/05 Javascript
javascript一些不错的函数脚本代码
2008/09/10 Javascript
js hover 定时器(实例代码)
2013/11/12 Javascript
详解JavaScript的表达式与运算符
2015/11/30 Javascript
让html元素随浏览器的大小自适应垂直居中的实现方法
2016/10/12 Javascript
Bootstrap的popover(弹出框)2秒后定时消失的实现代码
2017/02/27 Javascript
Bootstrap Table使用整理(五)之分页组合查询
2017/06/09 Javascript
简单的Vue异步组件实例Demo
2017/12/27 Javascript
Vue引入sass并配置全局变量的方法
2018/06/27 Javascript
基于vue+axios+lrz.js微信端图片压缩上传方法
2019/06/25 Javascript
[03:26]回顾2015国际邀请赛中国区预选赛
2015/06/09 DOTA
[39:11]DOTA2上海特级锦标赛C组资格赛#2 LGD VS Newbee第二局
2016/02/28 DOTA
[01:02:18]VGJ.S vs infamous Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
[46:20]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS BO3 第二场 1月22日
2021/03/11 DOTA
Python获取Linux系统下的本机IP地址代码分享
2014/11/07 Python
python strip() 函数和 split() 函数的详解及实例
2017/02/03 Python
python生成1行四列全2矩阵的方法
2018/08/04 Python
pytorch索引查找 index_select的例子
2019/08/18 Python
利用Python实现Json序列化库的方法步骤
2020/09/09 Python
CSS3教程(9):设置RGB颜色
2009/04/02 HTML / CSS
XMLHttpRequest对象在IE和Firefox中创建方式有没有不同
2016/03/23 面试题
秘书岗位职责
2013/11/18 职场文书
好的旅游活动方案
2014/08/19 职场文书
放飞梦想演讲稿800字
2014/08/26 职场文书
2014财产信托协议书范本
2014/11/18 职场文书
长城导游词300字
2015/01/30 职场文书
创业计划书之零食店(进口)
2019/09/24 职场文书
吃通javascript正则表达式
2021/04/21 Javascript
http通过StreamingHttpResponse完成连续的数据传输长链接方式
2022/02/12 Python