问题描述:
需要知道帆软报表里有哪些SQL, 用于运维或者分析数据血缘
解决
用python解析帆软模板文件里的SQL
在帆软 [管理系统]-[智能运维]-[资源迁移] 下导出所有模板文件, 解压到/模板目录
, 然后用执行
需要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