详解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中使用Beautiful Soup库的超详细教程
Apr 30 Python
基于Python如何使用AIML搭建聊天机器人
Jan 27 Python
python版简单工厂模式
Oct 16 Python
python多个模块py文件的数据共享实例
Jan 11 Python
Python实现账号密码输错三次即锁定功能简单示例
Mar 29 Python
Python requests模块基础使用方法实例及高级应用(自动登陆,抓取网页源码)实例详解
Feb 14 Python
tensorflow 实现数据类型转换
Feb 17 Python
用python介绍4种常用的单链表翻转的方法小结
Feb 24 Python
python使用gdal对shp读取,新建和更新的实例
Mar 10 Python
python有几个版本
Jun 17 Python
在Keras中CNN联合LSTM进行分类实例
Jun 29 Python
浅析python实现动态规划背包问题
Dec 31 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环境搭建(php+Apache+mysql)
2016/11/14 PHP
PHP基于XMLWriter操作xml的方法分析
2017/07/17 PHP
PHP去除空数组且数组键名重置的讲解
2019/02/28 PHP
Laravel框架查询构造器 CURD操作示例
2019/09/04 PHP
javascript实现根据时间段显示问候语的方法
2015/06/18 Javascript
Javascript实现商品秒杀倒计时(时间与服务器时间同步)
2015/09/16 Javascript
JS简单实现禁止访问某个页面的方法
2016/09/13 Javascript
Vue响应式原理详解
2017/04/18 Javascript
Bootstrap table使用方法总结
2017/05/10 Javascript
AugularJS从入门到实践(必看篇)
2017/07/10 Javascript
Node.js pipe实现源码解析
2017/08/12 Javascript
史上最全JavaScript数组去重的十种方法(推荐)
2017/08/17 Javascript
详解JavaScript基础知识(JSON、Function对象、原型、引用类型)
2018/01/16 Javascript
egg.js的基本使用和调用数据库的方法示例
2019/05/18 Javascript
Vue.js组件通信之自定义事件详解
2019/10/19 Javascript
[58:37]Serenity vs Fnatic 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
Python中的getopt函数使用详解
2015/07/28 Python
python 获取当天凌晨零点的时间戳方法
2018/05/22 Python
对Python Class之间函数的调用关系详解
2019/01/23 Python
解决python线程卡死的问题
2019/02/18 Python
Python中将两个或多个list合成一个list的方法小结
2019/05/12 Python
Djang的model创建的字段和参数详解
2019/07/27 Python
tensorflow生成多个tfrecord文件实例
2020/02/17 Python
Python多线程的退出控制实现
2020/08/10 Python
什么是Linux虚拟文件系统VFS
2015/08/25 面试题
实习老师个人总结的自我评价
2013/09/28 职场文书
实习自我评价怎么写
2013/12/02 职场文书
酒店端午节促销方案
2014/02/18 职场文书
《春雨》教学反思
2014/04/24 职场文书
优质服务演讲稿
2014/05/14 职场文书
12.4全国法制宣传日活动总结
2014/11/01 职场文书
2014年学校安全工作总结
2014/11/13 职场文书
2015年仓管员工作总结
2015/04/21 职场文书
2015年行政管理人员工作总结
2015/10/15 职场文书
简单实现一个手持弹幕功能+文字抖动特效
2021/03/31 HTML / CSS
在CSS中映射鼠标位置并实现通过鼠标移动控制页面元素效果(实例代码)
2021/04/22 HTML / CSS