詳解python校驗SQL腳本命名規(guī)則
需求背景
檢查腳本文件中SQL語句是否按規(guī)范編寫,規(guī)則如下:
- 創(chuàng)建表時,表名稱需以"t_"開頭且均為小寫
- 增加和創(chuàng)建列時,列名稱均為小寫字母和_組成
- 創(chuàng)建函數(shù),函數(shù)名稱需以"f_"開頭
- 創(chuàng)建存儲過程,存儲過程名稱需以"p_"開頭
- 創(chuàng)建索引,索引名稱需以"idx_"開頭
- 創(chuàng)建視圖,視圖名稱需以"v_"開頭
需求分析
首先要從腳本文件中提取出來表名稱、列名稱、函數(shù)名稱、存儲過程名稱、索引名稱、視圖名稱
這里需要使用python 相應的re和os模塊
分別創(chuàng)建相應的規(guī)則,相應的名稱依次分別進行校驗,返回信息和具體提示
代碼實現(xiàn)
以校驗表名稱為例 文本內容如下;
-- mysql創(chuàng)建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: 匹配規(guī)則
:param str: 匹配的對象
:return: 查詢的結果
"""
result = re.findall(rec, str)
return result
def get_table_names(str):
"""
提取表名稱返回數(shù)組
: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 匹配時忽略大小寫,因為我們的表的創(chuàng)建語句CREATE TABLE或create table t_business_apply_reback
- \w 匹配字母數(shù)字下劃線
- \S 匹配任意空字符
- [] 用來表示一組字符
- () 匹配括號內的表達式
- * 匹配0個或多個
- . 匹配任意字符除了換行符
- ? 匹配0個或多個,非貪婪模式
運行效果如下:

第二步——表名稱匹配
def is_match_t(strs):
"""
表名稱規(guī)則校驗: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, '創(chuàng)建表名稱:' + i + '不符合命名規(guī)范,請仔細檢查!'
return code, msg
- ^ 匹配字符串的開頭
- $ 匹配字符串的結尾
- [a-z_] 匹配小寫字母和下劃線
運行效果如下:

以上所述是小編給大家介紹的python校驗SQL腳本命名規(guī)則詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關文章
Python基于class()實現(xiàn)面向對象原理詳解
這篇文章主要介紹了Python基于class()實現(xiàn)面向對象原理詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-03-03
PyCharm+Pipenv虛擬環(huán)境開發(fā)和依賴管理的教程詳解
這篇文章主要介紹了PyCharm+Pipenv虛擬環(huán)境作開發(fā)和依賴管理的教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04
Python 調用 C++ 傳遞numpy 數(shù)據(jù)詳情
這篇文章主要介紹了Python 調用 C++ 傳遞numpy 數(shù)據(jù)詳情,文章主要分為兩部分,c++代碼和python代碼,代碼分享詳細,需要的小伙伴可以參考一下,希望對你有所幫助2022-03-03
pandas將DataFrame的幾列數(shù)據(jù)合并成為一列
本文主要介紹了pandas將DataFrame的幾列數(shù)據(jù)合并成為一列,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02
配置 Pycharm 默認 Test runner 的圖文教程
今天小編就為大家分享一篇配置 Pycharm 默認 Test runner 的圖文教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-11-11
Pygame坦克大戰(zhàn)游戲開發(fā)實戰(zhàn)詳解代碼
《坦克大戰(zhàn)》以二戰(zhàn)坦克為題材,既保留了射擊類游戲的操作性,也改進了射擊類游戲太過于復雜難玩的高門檻特點,集休閑與競技于一身。經(jīng)典再度襲來,流暢的畫面,瘋狂的戰(zhàn)斗,讓玩家再次進入瘋狂坦克的世界。玩家的目標是控制坦克躲避危險,消滅掉所有的敵人即可進入下一關2022-02-02
基于python3 OpenCV3實現(xiàn)靜態(tài)圖片人臉識別
這篇文章主要為大家詳細介紹了基于Python3 OpenCV3實現(xiàn)靜態(tài)圖片人臉識別,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05

