详解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 map和reduce函数用法示例
Feb 26 Python
Django Admin实现上传图片校验功能
Mar 06 Python
利用python实现简单的循环购物车功能示例代码
Jul 05 Python
Python实现将SQLite中的数据直接输出为CVS的方法示例
Jul 13 Python
Python数据分析之双色球统计单个红和蓝球哪个比例高的方法
Feb 03 Python
Python3爬取英雄联盟英雄皮肤大图实例代码
Nov 14 Python
python无限生成不重复(字母,数字,字符)组合的方法
Dec 04 Python
python处理大日志文件
Jul 23 Python
Python Pickle 实现在同一个文件中序列化多个对象
Dec 30 Python
浅谈Pycharm的项目文件名是红色的原因及解决方式
Jun 01 Python
新手学python应该下哪个版本
Jun 11 Python
Python+OpenCV实现在图像上绘制矩形
Mar 21 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字典树(Trie树)定义与实现方法示例
2017/10/09 PHP
PHPstorm激活码2020年5月13日亲测有效
2020/09/17 PHP
兼容Mozilla必须知道的知识。
2007/01/09 Javascript
syntaxhighlighter 使用方法
2007/07/02 Javascript
IE之动态添加DOM节点触发window.resize事件
2010/07/27 Javascript
JQUERY设置IFRAME的SRC值的代码
2010/11/30 Javascript
javascript中强制执行toString()具体实现
2013/04/27 Javascript
JavaScript类继承及实例化的方法
2015/07/25 Javascript
AngularJS轻松实现双击排序的功能
2016/08/30 Javascript
简单分析javascript中的函数
2016/09/10 Javascript
JS自动生成动态HTML验证码页面
2017/06/14 Javascript
prototype.js简单实现ajax功能示例
2017/10/18 Javascript
vuex 项目结构目录及一些简单配置介绍
2018/04/08 Javascript
基于Vue的延迟加载插件vue-view-lazy
2018/05/21 Javascript
webpack 静态资源集中输出的方法示例
2018/11/09 Javascript
使vue实现jQuery调用的两种方法
2019/05/12 jQuery
解决vue单页面应用中动态修改title问题
2019/06/09 Javascript
vue分页器组件编写方法详解
2019/06/28 Javascript
jQuery实现form表单基于ajax无刷新提交方法实例代码
2019/11/04 jQuery
jquery将信息遍历到界面上实例代码
2020/01/21 jQuery
Node.js path模块,获取文件后缀名操作
2020/11/07 Javascript
vue项目实现减少app.js和vender.js的体积操作
2020/11/12 Javascript
解决Vue-cli3没有vue.config.js文件夹及配置vue项目域名的问题
2020/12/04 Vue.js
[06:37]2014DOTA2国际邀请赛 昔日王者渴望重回巅峰
2014/07/12 DOTA
[01:06:59]完美世界DOTA2联赛PWL S2 Magma vs FTD 第一场 11.29
2020/12/02 DOTA
[01:07:19]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第一场 1月19日
2021/03/11 DOTA
Python字符串的encode与decode研究心得乱码问题解决方法
2009/03/23 Python
python动态网页批量爬取
2016/02/14 Python
python spyder中读取txt为图片的方法
2018/04/27 Python
Python使用pymongo库操作MongoDB数据库的方法实例
2019/02/22 Python
pytorch获取vgg16-feature层输出的例子
2019/08/20 Python
Python中的X[:,0]、X[:,1]、X[:,:,0]、X[:,:,1]、X[:,m:n]和X[:,:,m:n]
2020/02/13 Python
Python程序慢的重要原因
2020/09/04 Python
利用css3画个同心圆示例代码
2017/07/03 HTML / CSS
计算机专业毕业生求职信
2014/04/30 职场文书
2015年煤矿工作总结
2015/04/28 职场文书