文档章节

python校验SQL脚本命名规则

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

需求背景

检查脚本文件中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/测试工程师
私信 提问
[SQL Server玩转Python] 二.T-SQL查询表格值及Python实现数据分析

版权声明:本文为博主原创文章,转载请注明CSDN博客源地址!共同学习,一起进步~ https://blog.csdn.net/Eastmount/article/details/84029450 在开发项目过程中,更多的是通过Python访问SQL...

Eastmount
11/13
0
0
【简明 Python 教程】学习笔记【Python简介及基本概念】

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

donhui
2014/11/27
0
0
大神教你自动发现监控mysql从库状态

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

问题终结者
05/08
0
0
`__pycache__` 是什么

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

xinet
01/17
0
0
Python-OpenCV人脸识别之数据集生成

在上一篇文章中,我们学习了如何安装配置OpenCV和Python,然后写了些代码玩玩人脸检测。现在我们要进行下一步了,即搞一个人脸识别程序,就是不只是检测还需要识别到人是谁。 来,搞人脸识别...

煎鱼不可能有BUG
05/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Confluence 6 快捷键

快捷键图标。 官方的下载地址为:https://atlassianblog.wpengine.com/wp-content/uploads/2018/01/keyboard-shortcuts-infographics.pdf...

honeymose
今天
2
0
Apache限定目录解析PHP,限制user_agent,PHP相关的配置

Apache限定目录解析PHP 配置前访问upload/index.php [root@test-a ~]# curl -x192.168.77.139:80 'www.test.com/upload/index.php'This is upload diretory 配置,/usr/local/apache2.4/......

野雪球
今天
3
0
java.util.Concurrent.Exchanger源码

类图 源码: package java.util.concurrent;import java.util.concurrent.atomic.AtomicInteger;import java.util.concurrent.atomic.AtomicReference;import java.util.concurrent......

狼王黄师傅
今天
6
0
Kubernetes里的secret最基本的用法

Secret解决了密码、token、密钥等敏感数据的配置问题,使用Secret可以避免把这些敏感数据以明文的形式暴露到镜像或者Pod Spec中。 Secret可以以Volume或者环境变量的方式使用。 使用如下命令...

JerryWang_SAP
昨天
5
0
2018-11-20学习笔记

1. python数据类型: 给变量赋值什么样的值,变量就是什么样的类型 给变量赋值整数,变量就是整数类型 给变量赋值字符串,变量就是字符串类型 123 和“123”一样吗? 在python中 单引号 与双...

laoba
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部