使用 python 3 和 OSX 或 Linux 连接到 Wonderware Historian OLE DB

connect to Wonderware Historian OLE DB using python 3 and OSX or Linux

任何人都可以在 OSX(或 linux)上使用 python3 与 Wonderware 的 Historian 分享功能连接方法吗?

Historian 显然是 Microsoft SQL 服务器 OLE DB(参见 http://www.logic-control.com/datasheets/1/Historian/HistorianConcepts.pdf 的 pg102)。

另一个 SO post 建议唯一能够连接到 OLE DB 的 python 库是 'adodbapi' ()

代码尝试(使用默认 RO 凭据):

import adodbapi
ServerName = "ServerName"
MSQLDatabase = "Runtime"
username = "aaUser"
password = "pwUser"
conn = adodbapi.connect("PROVIDER=INSQL;Data Source={0};Database={1};trusted_connection=yes;UID={2};PWD{3};".format(ServerName,MSQLDatabase,username,password))

出现错误:

adodbapi.apibase.OperationalError: (InterfaceError("Windows COM Error: Dispatch('ADODB.Connection') failed.",)...

错误可能是由于 pywin32 包的缺失和不可用,这显然是 Windows (Pywin32 (com objects) on Mac)

感谢提示。我高度怀疑在这种情况下无法桥接 Microsoft 与 Mac/Linux 世界。

您应该能够使用 Python 访问 MS SQL 服务器数据库(例如 Wonderware Historian 数据库)。

要检查的事项:

  • 对于 ODBC,"Trusted Connection" 设置应为 "No"。可信连接意味着它会尝试使用 Windows 身份验证来登录。您想要使用用户名和密码来代替。我认为对于 OLE DB,您应该设置 "Integrated Security = SSPI"。
  • 连接字符串(用户名、服务器 Hostname/IP、数据库名称、正确的端口、语法)
  • 端口(确保使用正确的端口 - 可能是 non-standard 端口)
  • 防火墙 - 确保所有防火墙都设置为允许访问
  • 如果您使用的是主机名,请确保 DNS 正常工作(例如,您可以 ping 服务器吗?)
  • 您可能需要为 Linux 和 pyodbc 安装 ODBC 驱动程序。 ODBC 是一个更开放的标准。正如您所指出的,OLEDB 是 COM-based(例如 Windows-based),所以我不确定它是否兼容。

我可以通过 sqlalchemy 和 Linux 和 Windows 上的 pyodbc 使用 Python3 访问 Wonderware 服务器 - 我没有 Mac 所以你只能靠自己了。我读过还有其他可用的驱动程序,但我对它们没有任何经验。如果您在这里有任何建议,我很乐意听到。

这就是我模块化 pyodbc 功能的方式。本质上,我在我们的代码中定义了一个函数来设置 sql 引擎连接:

def get_conn():
    conn_pyodbc = pyodbc.connect(DSN=<myDSN>, UID=<user>, PWD=<pass>)
    return conn_pyodbc

我这样使用连接:

def executeQuery(sql_query):
    with get_conn() as conn:
        df = pd.read_sql(sql_query, conn)

使用上下文管理器似乎是处理打开和关闭数据库连接的更简单方法。

就设置 DSN 而言,我需要安装 Microsoft ODBC 驱动程序,这很容易通过我在网上找到的一些链接来完成。安装成功后,我手动编辑了 /etc/odbc.init 和 /etc/odbcinst.ini 文件,现在它们看起来像这样:

$ cat /etc/odbc.ini 
[myDSN]
Driver=ODBC Driver 13 for SQL Server
Description=Awesome server
Trace=No
Server=<serverIP>

$ cat odbcinst.ini 
[ODBC Driver 13 for SQL Server]
Description=Microsoft ODBC Driver 13 for SQL Server
Driver=/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.1.so.9.1
UsageCount=1

根据我的经验,您可以使用 'Trusted Connection',但这意味着您的计算机将尝试使用其 Windows 凭据连接到服务器。如果您登录到可以访问相关数据的 Windows 机器,这些方法就会起作用。 运行 在 Linux 上是另一回事,所以我继续使用 user/password 组合。

还有什么问题可以尽管问。