详解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 元组(Tuple)操作详解
Mar 11 Python
Python合并多个装饰器小技巧
Apr 28 Python
Python文件右键找不到IDLE打开项解决办法
Jun 08 Python
python中实现迭代器(iterator)的方法示例
Jan 19 Python
Python将多份excel表格整理成一份表格
Jan 03 Python
python3解析库lxml的安装与基本使用
Jun 27 Python
python 重命名轴索引的方法
Nov 10 Python
PyQt5实现暗黑风格的计时器
Jul 29 Python
Python实现socket非阻塞通讯功能示例
Nov 06 Python
PyCharm GUI界面开发和exe文件生成的实现
Mar 04 Python
高考要来啦!用Python爬取历年高考数据并分析
Jun 03 Python
Python图像处理库PIL详细使用说明
Apr 06 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
判“新”函数:得到今天与明天的秒数
2006/10/09 PHP
php基础知识:类与对象(2) 自动加载对象
2006/12/13 PHP
PHP取二进制文件头快速判断文件类型的实现代码
2013/08/05 PHP
PHPAnalysis中文分词类详解
2014/06/13 PHP
php生成QRcode实例
2014/09/22 PHP
PHP微信刮刮卡 附微信接口
2016/07/22 PHP
浅谈php中的循环while、do...while、for、foreach四种循环
2016/11/05 PHP
php获得刚插入数据的id 的几种方法总结
2018/05/31 PHP
PHP7数组的底层实现示例
2019/08/25 PHP
自动生成文章摘要的代码[JavaScript 版本]
2007/03/20 Javascript
Use Word to Search for Files
2007/06/15 Javascript
javascript parseInt 大改造
2009/09/27 Javascript
javascript面向对象编程(一) 实例代码
2010/06/25 Javascript
Jquery中给animation加更多的运作效果实例
2013/09/05 Javascript
javascript实现简单的Map示例介绍
2013/12/23 Javascript
JS实现关键字搜索时的相关下拉字段效果
2014/08/05 Javascript
jQuery DOM插入节点操作指南
2015/03/03 Javascript
jQuery弹出层后禁用底部滚动条(移动端关闭回到原位置)
2016/08/29 Javascript
Vue 父子组件的数据传递、修改和更新方法
2018/03/01 Javascript
js中DOM事件绑定分析
2018/03/18 Javascript
nodejs 使用http进行post或get请求的实例(携带cookie)
2019/01/03 NodeJs
使用Angular Cli如何创建Angular私有库详解
2019/01/30 Javascript
jQuery实现input[type=file]多图预览上传删除等功能
2019/08/02 jQuery
[48:00]EG vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.26
2018/08/29 DOTA
python分割和拼接字符串
2013/11/01 Python
python的staticmethod与classmethod实现实例代码
2018/02/11 Python
Python简单实现的代理服务器端口映射功能示例
2018/04/08 Python
python ftp 按目录结构上传下载的实现代码
2018/09/12 Python
IE下实现类似CSS3 text-shadow文字阴影的几种方法
2011/05/11 HTML / CSS
纯CSS绘制漂亮的圆形图案效果
2014/05/07 HTML / CSS
新员工欢迎词
2014/01/12 职场文书
机关保密承诺书
2014/06/03 职场文书
信用卡结清证明怎么写
2014/09/13 职场文书
学生逃课检讨书
2015/02/17 职场文书
校园新闻稿范文
2015/07/18 职场文书
2016年寒假社会实践活动心得体会
2015/10/09 职场文书