文档章节

python校验SQL脚本命名规则

红焖鲤鱼
 红焖鲤鱼
发布于 09/14 13:33
字数 679
阅读 310
收藏 3

需求背景

检查脚本文件中SQL语句是否按规范编写,规则如下:

  • 创建表时,表名称需以"t_"开头且均为小写
  • 增加和创建列时,列名称均为小写字母和_组成
  • 创建函数,函数名称需以"f_"开头
  • 创建存储过程,存储过程名称需以"p_"开头
  • 创建索引,索引名称需以"idx_"开头
  • 创建视图,视图名称需以"v_"开头

需求分析

  1. 首先要从脚本文件中提取出来表名称、列名称、函数名称、存储过程名称、索引名称、视图名称

    这里需要使用python 相应的re和os模块

  2. 分别创建相应的规则,相应的名称依次分别进行校验,返回信息和具体提示

代码实现

以校验表名称为例 文本内容如下;

-- 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);
  1. 第一步——提取表名称

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个或多个,非贪婪模式

运行效果如下:

  1. 第二步——表名称匹配

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

欢迎大家关注微信公众号进行交流   输入图片说明

© 著作权归作者所有

共有 人打赏支持
红焖鲤鱼
粉丝 113
博文 40
码字总数 29610
作品 0
浦东
QA/测试工程师
【简明 Python 教程】学习笔记【Python简介及基本概念】

Python的特色:简单、易学、免费开源、高层语言、可移植性、解释性、面向对象、可扩展性、可嵌入性、丰富的库。 Ctrl-d退出提示符; Ctrl-z再按Enter。 复数。 标示符的命名: 标示符是用来标...

donhui
2014/11/27
0
0
`__pycache__` 是什么

为了提高模块加载的速度,每个模块都会在 文件夹中放置该模块的预编译模块,命名为 , 是模块的预编译版本编码,一般都包含 Python 的版本号。例如在 CPython 发行版 3.4 中, 文件的预编译文...

xinet
01/17
0
0
大神教你自动发现监控mysql从库状态

导读 zabbix从库如果复制有问题,在主库机器有问题的时候,切为主就会导致数据的丢失。或者主从分离的时候,如果从库出现延时状态的话,会导致前端页面展示的数据不是为最新的数据。因此,监...

问题终结者
05/08
0
0
Python 连接mysql数据库进行操作

1.MySQLdb 模块是用于Python链接Mysql数据库的接口,默认是没有安装的 [root@python ~]# yum install MySQL-python -y 2.创建python脚本 [root@python ~]# cat mysql.py #!/usr/bin/env pytho......

XiaoBingZ
06/26
0
0
【ZZ】Python下划线与命名规范

Python下划线与命名规范 以下分四种情况说明下划线的作用,python对成员域没有严格控制,大部份只是作为命名规范存在,以下英文部份摘自python官方网站 singleleadingunderscore: weak "int...

学徒1986
2013/09/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

React 服务器渲染原理解析与实践

网盘下载地址 React 服务器渲染原理解析与实践 本套课程,讲解了React中SSR技术的整个搭建思路及流程,完整的从原理上讲清楚了SSR的概念,重点在于讲解编写SSR框架遇到的各种知识点,以及细节...

qq__2304636824
3分钟前
0
0
Jenkins使用

clean install -Dmaven.test.skip=true

1713716445
12分钟前
0
0
多线程

1. 多线程概念。并发和并行的概念。 多线程指的是一段时间内cpu同时执行多个线程。一个程序至少运行>=1个进程,进程就是运行中的程序,而一个进程至少运行>=1个线程,线程是操作系统能调度的...

鱼想吃肉
今天
0
0
HBase 表修复在线方式和离线方式

一、在线修复 1.1 使用检查命令 $ ./bin/hbase hbck 该命令可完整修复 HBase 元数据信息;存在有错误信息会进行输出; 也可以通过如下命令查看详细信息: $ ./bin/hbase hbck -details 1.2 ...

Ryan-瑞恩
今天
3
0
redis 系列二 -- 常用命令

1.基础命令 info ping quit save dbsize select flushdb flushall 2.键命令 2.1 set 直接赋值 set a a 2.2 get 取值 get a 2.3 exists 是否存在 exists a 2.4 expire 设置剩余时间 秒 expire......

imbiao
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部