详解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 相关文章推荐
django自定义Field实现一个字段存储以逗号分隔的字符串
Apr 27 Python
Python脚本简单实现打开默认浏览器登录人人和打开QQ的方法
Apr 12 Python
Python实现的旋转数组功能算法示例
Feb 23 Python
Python字符串匹配之6种方法的使用详解
Apr 08 Python
python异步实现定时任务和周期任务的方法
Jun 29 Python
对python中不同模块(函数、类、变量)的调用详解
Jul 16 Python
python 实现快速生成连续、随机字母列表
Nov 28 Python
python 输出列表元素实例(以空格/逗号为分隔符)
Dec 25 Python
python 函数嵌套及多函数共同运行知识点讲解
Mar 03 Python
Jupyter Notebook的连接密码 token查询方式
Apr 21 Python
MATLAB 如何求取离散点的曲率最大值
Apr 16 Python
利用python进行数据加载
Jun 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+mysql实现无限级分类 | 树型显示分类关系
2006/11/19 PHP
基于PHPExcel的常用方法总结
2013/06/13 PHP
php递归遍历多维数组的方法
2015/04/18 PHP
php生成图片验证码的实例讲解
2015/08/03 PHP
PHP基于Closure类创建匿名函数的方法详解
2017/08/17 PHP
CL vs ForZe BO5 第五场 2.13
2021/03/10 DOTA
iis6+javascript Add an Extension File
2007/06/13 Javascript
js控制的遮罩层实例介绍
2013/05/29 Javascript
JS获取几种URL地址的方法小结
2014/02/26 Javascript
7个让JavaScript变得更好的注意事项
2015/01/28 Javascript
js实现时间显示几天前、几小时前或者几分钟前的方法集锦
2015/05/29 Javascript
写给小白的JavaScript引擎指南
2015/12/04 Javascript
Node.js实现文件上传
2016/07/05 Javascript
浅谈jQuery中的eq()与DOM中element.[]的区别
2016/10/28 Javascript
详解使用Vue Router导航钩子与Vuex来实现后退状态保存
2017/09/11 Javascript
nodejs实现OAuth2.0授权服务认证
2017/12/27 NodeJs
解决JavaScript layui 下拉框不显示的问题
2018/08/14 Javascript
微信小程序实现左滑删除效果
2020/11/18 Javascript
[01:03:03]VP vs Mineski 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
python使用多线程不断刷新网页的方法
2015/03/31 Python
浅谈python字典多键值及重复键值的使用
2016/11/04 Python
python中numpy包使用教程之数组和相关操作详解
2017/07/30 Python
python读取txt文件并取其某一列数据的示例
2019/02/19 Python
利用Python+阿里云实现DDNS动态域名解析的方法
2019/04/01 Python
python实现QQ邮箱发送邮件
2020/03/06 Python
浅谈优化Django ORM中的性能问题
2020/07/09 Python
Django返回HTML文件的实现方法
2020/09/17 Python
Timex手表官网:美国运动休闲手表品牌
2017/01/28 全球购物
KIKO美国官网:意大利的平价彩妆品牌
2017/05/16 全球购物
SISLEY希思黎官方旗舰店:享誉全球的奢华植物美容品牌
2018/04/25 全球购物
Sunglass Hut巴西网上商店:男女太阳镜
2020/10/04 全球购物
人事专员岗位说明书
2014/07/29 职场文书
员工自我工作评价
2015/03/06 职场文书
2015年妇委会工作总结
2015/05/22 职场文书
Python连接Postgres/Mysql/Mongo数据库基本操作大全
2021/06/29 Python
springboot为异步任务规划自定义线程池的实现
2022/06/14 Java/Android