問題描述:
需要知道帆軟報表里有哪些SQL, 用于運維或者分析數(shù)據(jù)血緣
解決
用python解析帆軟模板文件里的SQL
在帆軟 [管理系統(tǒng)]-[智能運維]-[資源遷移] 下導出所有模板文件, 解壓到/模板目錄, 然后用執(zhí)行
需要python庫 PyQueen 支持
pip3 install pyqueen -i https://pypi.tuna.tsinghua.edu.cn/simple/
from pyqueen import DataSource, FineReport
FR_DIR = '/模板目錄'
# 提取所有SQL
data = FineReport().extract_sql(FR_DIR)
# [可選] 如果需要把路徑改成相對路徑, 修改 `根目錄`
for item in data:
item['fr_path'] = str(str(item['fr_path'])[str(item['fr_path']).find('根目錄'):]).replace('\\', '/')
# [可選] 如果需要將結果入庫, 假設表名 `devops_fr_sql`
ds= DataSource(conn_type='mysql', host='192.168.1.10', port='', username='root', password='123456', db_name='dbname')
df = pd.DataFrame(data)
ds.exe_sql('truncate table devops_fr_sql')
ds.to_db(df=df, tb_name='devops_fr_sql')
擴展
如果需要進一步分析sql引用到的表, 可以配合PyQueen 解析表, 使用正則解析
對于復雜SQL準確度較低, 僅供參考
from pyqueen import Utils
Utils.sql2table(sql_str="select * from xxxxx")
Done

image.png