详解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中实现php的var_dump函数功能
Jan 21 Python
利用python程序帮大家清理windows垃圾
Jan 15 Python
浅谈对yield的初步理解
May 29 Python
Python反射用法实例简析
Dec 22 Python
Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能示例
Mar 22 Python
Django中STATIC_ROOT和STATIC_URL及STATICFILES_DIRS浅析
May 08 Python
python tornado微信开发入门代码
Aug 24 Python
python实现向微信用户发送每日一句 python实现微信聊天机器人
Mar 27 Python
使用Python制作表情包实现换脸功能
Jul 19 Python
Python实现猜年龄游戏代码实例
Mar 25 Python
利用Python中的Xpath实现一个在线汇率转换器
Sep 09 Python
如何使用Django Admin管理后台导入CSV
Nov 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
世界第一个无线广播电台 KDKA
2021/03/01 无线电
PHP中查询SQL Server或Sybase时TEXT字段被截断的解决方法
2009/03/10 PHP
PHPMYADMIN 简明安装教程 推荐
2010/03/07 PHP
php数组的概述及分类与声明代码演示
2013/02/26 PHP
php addslashes 利用递归实现使用反斜线引用字符串
2013/08/05 PHP
thinkphp验证码显示不出来的解决方法
2014/03/29 PHP
PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)
2016/02/23 PHP
PHP http请求超时问题解决方案
2020/11/13 PHP
广告切换效果(缓动切换)
2009/05/27 Javascript
JQuery控制div外点击隐藏而div内点击不会隐藏的方法
2015/01/13 Javascript
C#中使用迭代器处理等待任务
2015/07/13 Javascript
JavaScript多线程详解
2015/08/12 Javascript
原生JS实现的自动轮播图功能详解
2018/12/28 Javascript
详解vue中v-bind:style效果的自定义指令
2020/01/21 Javascript
Node.js API详解之 repl模块用法实例分析
2020/05/25 Javascript
Element PageHeader页头的使用方法
2020/07/26 Javascript
微信小程序基于高德地图API实现天气组件(动态效果)
2020/10/22 Javascript
python Socket之客户端和服务端握手详解
2017/09/18 Python
Python实现简单求解给定整数的质因数算法示例
2018/03/25 Python
python numpy 部分排序 寻找最大的前几个数的方法
2018/06/27 Python
用Python实现读写锁的示例代码
2018/11/05 Python
意大利奢侈品购物网站:Giglio
2018/01/05 全球购物
介绍一下Java中的Class类
2015/04/10 面试题
函授本科自我鉴定
2014/02/04 职场文书
车队司机自我鉴定
2014/03/02 职场文书
企业文化口号
2014/06/12 职场文书
2014年小学重阳节活动策划方案
2014/09/16 职场文书
医院领导班子整改方案
2014/10/01 职场文书
简易离婚协议书范本2014
2014/10/15 职场文书
2015年监理工作总结范文
2015/04/07 职场文书
色戒观后感
2015/06/12 职场文书
小学音乐课歌曲《堆雪人》教学反思
2016/02/18 职场文书
2016年教师党员创先争优承诺书
2016/03/24 职场文书
css 中多种边框的实现小窍门
2021/04/07 HTML / CSS
python基础之文件操作
2021/10/24 Python
Python 数据可视化之Seaborn详解
2021/11/02 Python