python校验SQL脚本命名规则
原
荐
字数 664
阅读 8
收藏 0
开源中国十周年庆:开源众包怎么做我说了算!参与赢终身免费大奖 >>>
需求背景
检查脚本文件中SQL语句是否按规范编写,规则如下:
- 创建表时,表名称需以"t_"开头且均为小写
- 增加和创建列时,列名称均为小写字母和_组成
- 创建函数,函数名称需以"f_"开头
- 创建存储过程,存储过程名称需以"p_"开头
- 创建索引,索引名称需以"idx_"开头
- 创建视图,视图名称需以"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
- flags=re.I 匹配时忽略大小写,因为我们的表的创建语句CREATE TABLE或create table t_business_apply_reback
- \w 匹配字母数字下划线
- \S 匹配任意空字符
- [] 用来表示一组字符
- () 匹配括号内的表达式
- * 匹配0个或多个
- . 匹配任意字符除了换行符
- ? 匹配0个或多个,非贪婪模式
运行效果如下:
- 第二步——表名称匹配
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
- ^ 匹配字符串的开头
- $ 匹配字符串的结尾
- [a-z_] 匹配小写字母和下划线
运行效果如下:
源码地址: https://gitee.com/hellotester/pythonLearn/tree/master/re_test
© 著作权归作者所有
共有人打赏支持
相关文章 最新文章
Python的特色:简单、易学、免费开源、高层语言、可移植性、解释性、面向对象、可扩展性、可嵌入性、丰富的库。 Ctrl-d退出提示符; Ctrl-z再按Enter。 复数。 标示符的命名: 标示符是用来标...
donhui
2014/11/27
0
0
为了提高模块加载的速度,每个模块都会在 文件夹中放置该模块的预编译模块,命名为 , 是模块的预编译版本编码,一般都包含 Python 的版本号。例如在 CPython 发行版 3.4 中, 文件的预编译文...
xinet
01/17
0
0
导读 zabbix从库如果复制有问题,在主库机器有问题的时候,切为主就会导致数据的丢失。或者主从分离的时候,如果从库出现延时状态的话,会导致前端页面展示的数据不是为最新的数据。因此,监...
问题终结者
05/08
0
0
Python下划线与命名规范 以下分四种情况说明下划线的作用,python对成员域没有严格控制,大部份只是作为命名规范存在,以下英文部份摘自python官方网站 singleleadingunderscore: weak "int...
学徒1986
2013/09/03
0
0
1 变量的作用域 Python是静态作用域,也就是说在Python中,变量的作用域源于它在代码中的位置;在不同的位置,可能有不同的命名空间。命名空间是变量作用域的体现形式。 2 LEGB各自代表的...
翠竹09
08/12
0
0
没有更多内容
加载失败,请刷新页面
加载更多The first and foremost advantage of any logging API over plain System.out.println resides in its ability to disable certain log statements while allowing others to print unhinde......
Yixin_Nemo
25分钟前
1
0
http://www.qter.org/portal.php?mod=view&aid=62 1、新建QT控制台应用,在.pro中添加 QT += core xml 2、xml文件: <?xml version="1.0" encoding="UTF-8"?><书库> <图书 编号="1">......
OceanStar
27分钟前
1
0
<template name="userTemp"> <view class="user"> <view>姓名:{{item.name}}</view> <view>性别:{{item.sex}}</view> <view>年龄:{{item.age}}</view> </view> </template> <template is="模......
lsjlgo
27分钟前
1
0
Web应用防火墙是集web防护、网页保护、负载均衡、应用交付于一体的web整体安全防护设备的一款产品 。 Web应用防火墙产品部署在Web服务器的前面,串行接入,不仅在硬件性能上要求高,而且不能...
上树的熊
45分钟前
1
0
没有更多内容
加载失败,请刷新页面
加载更多以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- vue实战 - 车牌号校验和银行校验
- 更加灵活的参数校验,Spring-boot自定义参数校验注解
- 一坨一坨的 if/else 参数校验,终于被 Spring Boot 参数校验组件整干净了
- SpringMVC——数据校验
- gin请求数据校验
- Dojo 表单校验
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
互联网产品运营:产品经理的10堂精英课
丁华、聂嵘海、王晶 / 电子工业出版社 / 2017-5 / 59
《互联网产品运营:产品经理的10堂精英课》共有10章,前9章分别从互联网产品运营的9个点入手,最后一章辅以案例,分析当下市场热门产品的运营模式。 第1章点明在运营产品之前需要经过缜密的策划,这样才能有明确的运营方向;第2章讲述产品运营的定位,有了准确的定位,运营才不会走偏;第3章描述用户运营,用户是一款产品的根本,没有用户,产品就是死的;第4章讲述内容运营的技巧,产品内容要怎么运营才能受到用......一起来看看 《互联网产品运营:产品经理的10堂精英课》 这本书的介绍吧!