详解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 相关文章推荐
python3.0 字典key排序
Dec 24 Python
python类中super()和__init__()的区别
Oct 18 Python
利用python程序帮大家清理windows垃圾
Jan 15 Python
修复CentOS7升级Python到3.6版本后yum不能正确使用的解决方法
Jan 26 Python
Python SMTP发送邮件遇到的一些问题及解决办法
Oct 24 Python
Python API 自动化实战详解(纯代码)
Jun 11 Python
python五子棋游戏的设计与实现
Jun 18 Python
python获取当前文件路径以及父文件路径的方法
Jul 10 Python
python字符串替换re.sub()实例解析
Feb 09 Python
PyTorch中clone()、detach()及相关扩展详解
Dec 09 Python
Python面向对象编程之类的概念
Nov 01 Python
Python编写冷笑话生成器
Apr 20 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 CURL获取邮箱地址的详解
2013/06/03 PHP
浅析php学习的路线图
2013/07/10 PHP
Yii框架获取当前controlle和action对应id的方法
2014/12/03 PHP
举例讲解PHP面对对象编程的多态
2015/08/12 PHP
PHP常用的类封装小结【4个工具类】
2019/06/28 PHP
phpstudy后门rce批量利用脚本的实现
2019/12/12 PHP
jquery.pagination.js 无刷新分页实现步骤分享
2012/05/23 Javascript
异步JavaScript编程中的Promise使用方法
2015/07/28 Javascript
AngularJS中使用HTML5手机摄像头拍照
2016/02/22 Javascript
通过Ajax使用FormData对象无刷新上传文件方法
2016/12/08 Javascript
Vue.js系列之项目搭建(1)
2017/01/03 Javascript
通过源码分析Vue的双向数据绑定详解
2017/09/24 Javascript
使用 Node.js 模拟滑动拼图验证码操作的示例代码
2017/11/02 Javascript
vue.js整合mint-ui里的轮播图实例代码
2017/12/27 Javascript
jQuery实现的下雪动画效果示例【附源码下载】
2018/02/02 jQuery
cdn模式下vue的基本用法详解
2018/10/07 Javascript
layui清除radio的选中状态实例
2019/11/14 Javascript
JS实现横向轮播图(中级版)
2020/01/18 Javascript
JS代码检查工具ESLint介绍与使用方法
2020/02/04 Javascript
JavaScript如何判断对象有某属性
2020/07/03 Javascript
[53:29]完美世界DOTA2联赛循环赛 DM vs Matador BO2第二场 11.04
2020/11/05 DOTA
python基础教程之简单入门说明(变量和控制语言使用方法)
2014/03/25 Python
Python装饰器基础详解
2016/03/09 Python
Python实现将一个正整数分解质因数的方法分析
2017/12/14 Python
python实现最长公共子序列
2018/05/22 Python
python 遍历列表提取下标和值的实例
2018/12/25 Python
ipad上运行python的方法步骤
2019/10/12 Python
python实现监控阿里云账户余额功能
2019/12/16 Python
Python进阶之迭代器与迭代器切片教程
2020/01/29 Python
Python中全局变量和局部变量的理解与区别
2021/02/07 Python
Pat McGrath Labs官网:世界上最有影响力的化妆师推出的彩妆品牌
2018/01/07 全球购物
2014年感恩母亲演讲稿
2014/05/27 职场文书
商铺门面租房协议书
2014/10/21 职场文书
2014年行政人事工作总结
2014/12/09 职场文书
毕业赠语大全
2015/06/23 职场文书
MySQL 中如何归档数据的实现方法
2022/03/16 SQL Server