2

pyodbcデータベース接続の管理に使用しています。OSI PI データベースに接続しようとすると、次のエラーが表示されます。

pyodbc.Error: ('IM002', "[IM002] [OSI][PI ODBC][PI]PI-API Error <pilg_getdefserverinfo> 0 (0) (SQLDriverConnectW); [01000] [Microsoft][ODBC Driver Manager] The driver doesn't support the version of ODBC behavior that the application requested (see SQLSetEnvAttr). (0)")

ベンダーと話し合ったところ、次のような回答がありました。 Looks like pyodbc is written against ODBC 3.x. The OSI PI ODBC driver is using ODBC 2.0. The python ODBC driver manager will convert most ODBC 3 calls on the fly to ODBC 2 ones. Anything added to 3, however, will obviously fail. You would need to find some way to make sure that your only using 2.0 compliant ODBC calls. Currently their is not a PI ODBC driver that is compliant with ODBC 3.0.

この時点で接続を試みているだけなので、私のコードはかなり単純です。

import pyodbc
constr = 'DRIVER={PI-ODBC};SERVER=myserver;UID=MY_UID'
pyodbc.pooling=False
conn = pyodbc.connect(constr)           # Error at this line
conn.close()

Python を OSI PI に接続した人はいますか? もしそうなら、どのようにしましたか?そうではなく、OSI データベースのデータをまだ使用している場合、どのようにしてアクセスしたのでしょうか?

4

2 に答える 2

3

これを行う方法を理解しました。私は使用から変更する必要がpyodbcありました。代わりに、これをwin32comで行っています。

from win32com.client import Dispatch

oConn = Dispatch('ADODB.Connection')
oRS = Dispatch('ADODB.RecordSet')

oConn.ConnectionString = "Provider=PIOLEDB;Data Source=<server>;User ID=<username>;database=<database>;Password=<password>"
oConn.Open()

if oConn.State == 0:
    print "We've connected to the database."
    db_cmd = """SELECT tag FROM pipoint WHERE tag LIKE 'TAG0001%'"""
    oRS.ActiveConnection = oConn
    oRS.Open(db_cmd)
    while not oRS.EOF:
        #print oRS.Fields.Item("tag").Value   # Ability to print by a field name
        print oRS.Fields.Item(0).Value        # Ability to print by a field location
        oRS.MoveNext()
    oRS.Close()
    oRS = None
else:
    print "Not connected"

if oConn.State == 0: 
    oConn.Close()
oConn = None

ノート:

  • これには、OSISoft が提供する PIOLEDB ドライバーが、このコードを実行するマシンにインストールされている必要があります。
  • この方法では、パフォーマンスはそれほど悪くないようです。他のいくつかのクエリで数十万のレコードを引き出すことができ、許容できる時間内に返されました
于 2012-02-01T17:46:59.623 に答える
-2

このhttp://pypi.python.org/pypi/ceODBC/2.0.1を使用してみてください

于 2012-01-17T16:38:50.297 に答える