介绍
小编给大家分享一下Python如何使用graphviz画流程图,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!
<强>问题描述强>
项目中需要用到流程图,如果用js的echarts处理,不同层级建动态计算位置比较复杂,考虑用Python来实现
<强>测试演示强>
实现效果如下
完整代码
import yaml import 操作系统 import ibm_db 得到graphviz import 有向图 得到datetime import  datetime #,db连接 def db2_query (sql): 时间=conn 才能;ibm_db.connect ( ,,,,=% s;数据库主机名=% s;港口=% s;协议=TCPIP; UID=% s; PWD=% s", %, ( ,,,,,配置[& # 39;db2_databse& # 39;], ,,,,,配置[& # 39;db2_host& # 39;], ,,,,,配置[& # 39;db2_port& # 39;], ,,,,,配置[& # 39;db2_user& # 39;], ,,,,,配置[& # 39;db2_password& # 39;】 ,,,,,,,,,,, ,,) if 才能;康涅狄格州: ,,,#,执行 ,,,stmt =, ibm_db.exec_immediate(康涅狄格州,sql) ,,,result =, ibm_db.fetch_both(支撑) return 因此,,才能支撑,康涅狄格州 #,添加所有的点 def add_nodes (): sql =,才能“SELECT *,得到AML.DEP_OFTEN_TRAD WHERE ACCOUNT_NO=? +, ACCOUNT_NO +,“, ORDER BY NUM DESC fetch first 10, rows ;“ ,,,结果,支撑,conn =, db2_query (sql) 时间=nodes 才能;[] nodes_dict 才能=,{} nodes_dict才能[ACCOUNT_NO],=, & # 39;一个# 39; count 才能=0 while 才能;(结果): ,,,count =, count + 1 ,,,print(科(奥德(& # 39;一个# 39;),+,计数),+,,,,,+,结果[3]) ,,,dot.node(科(奥德(& # 39;一个# 39;),+,计数),,结果[3],形状=皉ectangle",,颜色=皁range") ,,,nodes.append(结果[2]) ,,,nodes_dict[结果[2]],=,空空(奥德(& # 39;一个# 39;),+,计数) ,,,print (& # 39; - - - - - - - - - - - - - - - - - - - - - - - # 39;) ,,,result =, ibm_db.fetch_both(支撑) #,才能关闭数据库连接 ibm_db.close才能(康涅狄格州) nodes.append才能(ACCOUNT_NO) 时间点,return 才能;节点,nodes_dict #,添加所有的边 def add_edges(节点): 时间=nodes_back 才能;节点 打印(nodes_back)才能 for 才能;p 拷贝范围(len (nodes_back)): ,,,nodes_temp =, nodes.copy () ,,,from_nodes =, nodes_temp.pop (p) ,,,print (“len  of nodes_temp:“, +, str (len (nodes_temp)), +,“, from_nodes:“, +, from_nodes) ,,,nodes_temp_in =,,,, . join (nodes_temp) ,,,nodes_temp_in =, & # 39; (& # 39;, +, nodes_temp_in +, & # 39;) & # 39; ,,,sql =,“SELECT *,得到AML.DEP_OFTEN_TRAD WHERE ACCOUNT_NO=? +, from_nodes +,“,以及CNTPRT_ACCOUNT_NO IN" +, \ ,,,,,nodes_temp_in 结果,,,,,支撑,,conn =, db2_query (sql) ,,,if (结果): ,,,,,while (结果): ,,,,,,,印刷(& # 39;- - - - - - - - - - - - - - - - - - - - - - - # 39;) ,,,,,,,印刷(结果) ,,,,,,,印刷(结果[& # 39;CNTPRT_ACCOUNT_NO& # 39;], +, nodes_dict[结果[& # 39;CNTPRT_ACCOUNT_NO& # 39;]]) ,,,,,,,印刷(“add 边缘,“,+,结果[& # 39;TRAD_VAL& # 39;], +,,,:“, +, from_nodes +,,,:“, +,结果[& # 39;CNTPRT_ACCOUNT_NO& # 39;]) ,,,,,,,dot.edge (nodes_dict [from_nodes], nodes_dict[结果[& # 39;CNTPRT_ACCOUNT_NO& # 39;]],,结果[& # 39;TRAD_VAL& # 39;]) ,,,,,,,result =, ibm_db.fetch_both(支撑) ,,,,,#,关闭数据库连接 ,,,,,ibm_db.close(康涅狄格州) return 才能点 if __name__ ==,“__main__": yaml_path 才能=,os.path.join (& # 39; . ./& # 39;,, & # 39; config.yaml& # 39;) with 才能;开放(yaml_path, & # 39; " # 39;), as f: ,,,config =, yaml.load (f) null null null null null null null null null null null null null null null null null null null null null null null null nullPython如何使用graphviz画流程图