<p>您可以使用proficy iHistorian附带的oledbapi,请参阅<a href="http://help.geautomation.com/Historian55/iHistorian.htm" rel="nofollow noreferrer">manual of iHistorian</a>。在手册中,您可以找到可用的表和SQL代码的一些示例。检查API是否正确安装了iHistorian附带的“Historian Interactive SQL”程序。在</p>
<p>我使用了python包<a href="http://pyado.sourceforge.net/" rel="nofollow noreferrer">PyADO</a>来连接到oledbapi(从<a href="https://gist.github.com/charlesreid1/28299e1977c832b163e3" rel="nofollow noreferrer">GitHub Gist</a>获得,还需要包'win32com'和'pythoncom')。该模块在PyPi上不可用,所以只需下载它,提取它并将其放入“site packages”文件夹(或您当前的工作目录)。代码中有一些错误,请在'皮亚多.py'将“不等于”的所有“<;>符号替换为”!='. 对于python3的用法,还将所有print语句从“print blablabla”更新为“print(blablabla)”。为了提取数据,以下内容就足够了(我包括了“prettytable”以获得数据的适当打印):</p>
<pre><code>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()
</code></pre>
<p>导致:</p>
^{pr2}$
<p>我还试图使用包'<a href="https://sourceforge.net/projects/adodbapi/" rel="nofollow noreferrer">adodbapi</a>',但是我不能使它工作。ODBC似乎根本不适用于iHistorian,这使得包“pyodbc”也不适合于此。如果有人有一个解决方案,用一个维护良好的python包连接到oledbapi,我很乐意听到。在</p>