详解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安装路径以及安装包路径小技巧
Apr 28 Python
Python用Bottle轻量级框架进行Web开发
Jun 08 Python
浅谈function(函数)中的动态参数
Apr 30 Python
python如何制作英文字典
Jun 25 Python
python print出共轭复数的方法详解
Jun 25 Python
Flask教程之重定向与错误处理实例分析
Aug 01 Python
python中eval与int的区别浅析
Aug 11 Python
浅谈SciPy中的optimize.minimize实现受限优化问题
Feb 29 Python
python matplotlib.pyplot.plot()参数用法
Apr 14 Python
如何将tensorflow训练好的模型移植到Android (MNIST手写数字识别)
Apr 22 Python
python报错: 'list' object has no attribute 'shape'的解决
Jul 15 Python
python利用xpath爬取网上数据并存储到django模型中
Feb 26 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
第十一节 重载 [11]
2006/10/09 PHP
php中stdClass的用法分析
2015/02/27 PHP
PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
2016/03/25 PHP
php post换行的方法
2020/02/03 PHP
初窥JQuery(一)jquery选择符 必备知识点
2010/11/25 Javascript
JavaScript使用shift方法移除素组第一个元素实例分析
2015/04/06 Javascript
jQuery实现tab选项卡效果的方法
2015/07/08 Javascript
基于jquery实现鼠标滚轮驱动的图片切换效果
2015/10/26 Javascript
第一次接触神奇的Bootstrap基础排版
2016/07/26 Javascript
JS匿名函数类生成方式实例分析
2016/11/26 Javascript
Vue 2.0的数据依赖实现原理代码简析
2017/07/10 Javascript
vue.js根据代码运行环境选择baseurl的方法
2018/02/28 Javascript
Vue实现动态添加或者删除对象和对象数组的操作方法
2018/09/21 Javascript
原生js实现密码强度验证功能
2020/03/18 Javascript
JavaScript字符和ASCII实现互相转换
2020/06/03 Javascript
python+matplotlib绘制饼图散点图实例代码
2018/01/20 Python
Python实现PS滤镜的旋转模糊功能示例
2018/01/20 Python
Python把csv数据写入list和字典类型的变量脚本方法
2018/06/15 Python
Python使用Selenium爬取淘宝异步加载的数据方法
2018/12/17 Python
对python多线程SSH登录并发脚本详解
2019/02/14 Python
python读取并写入mat文件的方法
2019/07/12 Python
python接口自动化如何封装获取常量的类
2019/12/24 Python
python 截取XML中bndbox的坐标中的图像,另存为jpg的实例
2020/03/10 Python
Python操作PostgreSql数据库的方法(基本的增删改查)
2020/12/29 Python
新西兰Bookabach:查找全球度假屋
2020/12/03 全球购物
Linux如何为某个操作添加别名
2013/03/01 面试题
园林毕业生自我鉴定范文
2013/12/29 职场文书
大学毕业感言100字
2014/02/03 职场文书
《陋室铭》教学反思
2014/02/26 职场文书
小学生中国梦演讲稿
2014/04/23 职场文书
助人为乐好少年事迹材料
2014/08/18 职场文书
2014年宣传部个人工作总结
2014/12/06 职场文书
离婚财产分割协议书
2015/08/11 职场文书
如何将JavaScript将数组转为树形结构
2021/06/02 Javascript
MySQL 1130异常,无法远程登录解决方案详解
2021/08/23 MySQL
关于Python使用turtle库画任意图的问题
2022/04/01 Python