需求背景
檢查腳本文件中sql語句是否按規范編寫,規則如下:
- 創建表時,表名稱需以"t_"開頭且均為小寫
- 增加和創建列時,列名稱均為小寫字母和_組成
- 創建函數,函數名稱需以"f_"開頭
- 創建存儲過程,存儲過程名稱需以"p_"開頭
- 創建索引,索引名稱需以"idx_"開頭
- 創建視圖,視圖名稱需以"v_"開頭
需求分析
首先要從腳本文件中提取出來表名稱、列名稱、函數名稱、存儲過程名稱、索引名稱、視圖名稱
這里需要使用python 相應的re和os模塊
分別創建相應的規則,相應的名稱依次分別進行校驗,返回信息和具體提示
代碼實現
以校驗表名稱為例 文本內容如下;
1
2
3
4
5
6
7
8
9
|
- - 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
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
2
3
4
5
6
7
8
9
10
11
12
|
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_] 匹配小寫字母和下劃線
運行效果如下:
以上所述是小編給大家介紹的python校驗sql腳本命名規則詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!
原文鏈接:https://my.oschina.net/hellotest/blog/2051368