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

第二步——表名稱匹配
def is_match_t(strs):
"""
表名稱規(guī)則校驗(yàn):t_開(kāi)頭小寫(xiě)字母和下劃線
:param strs:
:return: 1通過(guò),0不通過(guò),msg返回信息
"""
code, msg = 1, '驗(yàn)證通過(guò)'
for i in strs:
if re.match(r'^t_[a-z_]+$', i) is None:
return 0, '創(chuàng)建表名稱:' + i + '不符合命名規(guī)范,請(qǐng)仔細(xì)檢查!'
return code, msg
- ^ 匹配字符串的開(kāi)頭
- $ 匹配字符串的結(jié)尾
- [a-z_] 匹配小寫(xiě)字母和下劃線
運(yùn)行效果如下:

以上所述是小編給大家介紹的python校驗(yàn)SQL腳本命名規(guī)則詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
PyCharm+Pipenv虛擬環(huán)境開(kāi)發(fā)和依賴管理的教程詳解
Python 調(diào)用 C++ 傳遞numpy 數(shù)據(jù)詳情
pandas將DataFrame的幾列數(shù)據(jù)合并成為一列
修改Python?pip下載包的默認(rèn)路徑詳細(xì)步驟記錄
配置 Pycharm 默認(rèn) Test runner 的圖文教程
Pygame坦克大戰(zhàn)游戲開(kāi)發(fā)實(shí)戰(zhàn)詳解代碼
基于python3 OpenCV3實(shí)現(xiàn)靜態(tài)圖片人臉識(shí)別

