我如何使用python轻松地从历史数据库中提取数据?

时间:2017-10-11 07:26:48

标签: python pull historian proficy

我是Proficy Historian和Python的新手。我的应用程序的目的是开始从Proficy中提取数据。

GE(Proficy)Historian安装在虚拟机Server A上,而我的python安装在另一个虚拟机Server B中。

两台服务器都在同一个防火墙下,在同一个VLAN内,因此可以进行通信。

我试过环顾四周,但我不确定哪种提取数据的最简单方法...有什么帮助?

2 个答案:

答案 0 :(得分:2)

您可以使用proficy iHistorian附带的OLE DB API,请参阅manual of iHistorian。在手册中,您可以找到可用的表和SQL代码的一些示例。使用' Historian Interactive SQL'检查API是否已正确安装。 iHistorian附带的计划。

我使用了python包' PyADO'为了连接到OLE DB API(从GitHub Gist获取此信息,还需要包" win32com'和#pythoncom')。该模块在PyPi上不可用,因此只需下载它,将其解压缩并放入网站包中即可。文件夹(或您当前的工作目录)。代码中存在一些错误,请在“PyADO.py”中修复此错误。通过替换所有'<>'符号不等于'与'!='。对于python 3的使用,还要更新来自' print blabla'的所有打印报表。打印(blabla)。为了提取数据,以下内容应该足够了(为了得到合适的数据打印,我包含了“非常好的'”)

import PyADO
from prettytable import PrettyTable

conn = PyADO.connect(None,host='IHISTORIAN_SERVER_NAME',user='USERNAME',password='PASSWORD',provider='iHOLEDB.iHistorian.1')
curs = conn.cursor()

curs.execute("SELECT timestamp, value, quality, tagname FROM ihrawdata WHERE samplingmode=rawbytime AND timestamp>='01-Mar-2018 13:58' AND timestamp<='01-Mar-2018 14:30' AND (tagname=SOMETAG OR tagname=OTHERTAG)") 
result = curs.fetchall()
descr = curs.description

header = [i[0] for i in descr]
table = PrettyTable(header)
for row in result:
    table.add_row(row)
print(table)

curs.close()
conn.close()

导致:

+---------------------------+--------------------+------------------+--------------+
|         timestamp         |       value        |     quality      |   tagname    |
+---------------------------+--------------------+------------------+--------------+
| 2018-03-01 13:58:15+00:00 | -4.422495365142822 | Good NonSpecific | SOMETAG      |
| 2018-03-01 13:59:15+00:00 | -3.046903133392334 | Good NonSpecific | SOMETAG      |
| 2018-03-01 13:58:00+00:00 | 61.07942581176758  | Good NonSpecific | OTHERTAG     |
| 2018-03-01 13:59:00+00:00 | 60.99810791015625  | Good NonSpecific | OTHERTAG     |
| 2018-03-01 14:00:00+00:00 | 62.58036422729492  | Good NonSpecific | OTHERTAG     |
+---------------------------+--------------------+------------------+--------------+

我还尝试使用该软件包&#39; adodbapi&#39;但我无法使其正常运行。似乎ODBC并不能与iHistorian一起工​​作,这使得软件包“pyodbc”成为可能。也不适合这个。如果有人有一个解决方案连接到一个维护良好的python包的OLE DB API,我很高兴听到它。

答案 1 :(得分:0)

您可能需要解决与GE Historian的REST API接口与Python的接口问题。这是一个公共链接 Historian API documentation for Version 5.5

它仍适用于最新版本,但安装iso也包含最新的REST API文档(如果此URL已过期)。如果您的客户端语言是灵活的,那么GE Historian也有C,C ++,VC ++和VC ++ 6库和示例。您可以通过在Historian安装期间从客户端工具安装Historian API SDK来找到它们。它们将位于C:\ Program Files \ Proficy \ Proficy Historian \ x86 \ api \