详解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操作sqlite的CRUD实例分析
May 08 Python
python中print()函数的“,”与java中System.out.print()函数中的“+”功能详解
Nov 24 Python
Python读取excel中的图片完美解决方法
Jul 27 Python
对Python通过pypyodbc访问Access数据库的方法详解
Oct 27 Python
python3实现猜数字游戏
Dec 07 Python
python3连接kafka模块pykafka生产者简单封装代码
Dec 23 Python
基于Python爬取fofa网页端数据过程解析
Jul 13 Python
Pandas的Apply函数具体使用
Jul 21 Python
pycharm2020.2 配置使用的方法详解
Sep 16 Python
python利用tkinter实现图片格式转换的示例
Sep 28 Python
Python基于locals返回作用域字典
Oct 17 Python
Python爬取某拍短视频
Jun 11 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用户注册页面填写信息完整实例(附源码)
2015/11/17 PHP
优化WordPress中文章与评论的时间显示
2016/01/12 PHP
JavaScript中“+=”的应用
2007/02/02 Javascript
JS中动态添加事件(绑定事件)的代码
2011/01/09 Javascript
jQuery学习笔记之 Ajax操作篇(二) - 数据传递
2014/06/23 Javascript
php基于redis处理session的方法
2016/03/14 Javascript
获取select的value、text值的简单示例(jquery与javascript)
2016/12/07 Javascript
DropDownList控件绑定数据源的三种方法
2016/12/24 Javascript
快速搭建vue2.0+boostrap项目的方法
2018/04/09 Javascript
layui radio性别单选框赋值方法
2018/08/15 Javascript
js replace替换字符串同时替换多个方法
2018/11/27 Javascript
JavaScript作用域链实例详解
2019/01/21 Javascript
Vue+ElementUI table实现表格分页
2019/12/14 Javascript
vue+animation实现翻页动画
2020/06/29 Javascript
JavaScript动画实例之粒子文本的实现方法详解
2020/07/28 Javascript
django中send_mail功能实现详解
2018/02/06 Python
python实时监控cpu小工具
2018/06/21 Python
详解python里的命名规范
2018/07/16 Python
Python3多目标赋值及共享引用注意事项
2019/05/27 Python
python覆盖写入,追加写入的实例
2019/06/26 Python
利用python实现汉字转拼音的2种方法
2019/08/12 Python
关于PyTorch源码解读之torchvision.models
2019/08/17 Python
python脚本之一键移动自定格式文件方法实例
2019/09/02 Python
基于python tkinter的点名小程序功能的实例代码
2020/08/22 Python
Python实现像awk一样分割字符串
2020/09/15 Python
python打包多类型文件的操作方法
2020/09/21 Python
abstract是什么意思
2012/02/12 面试题
教育系毕业生中文求职信范文
2013/10/06 职场文书
计算机学生求职信范文
2014/01/30 职场文书
就业协议书的作用
2014/04/11 职场文书
大班幼儿评语大全
2014/04/30 职场文书
房屋产权证明书
2014/10/15 职场文书
小学生勤俭节约倡议书
2015/04/29 职场文书
校园广播站开场白
2015/06/01 职场文书
2016重阳节红领巾广播稿
2015/12/18 职场文书
财务人员廉洁自律心得体会
2016/01/13 职场文书