【问题标题】:connect to Wonderware Historian OLE DB using python 3 and OSX or Linux使用 python 3 和 OSX 或 Linux 连接到 Wonderware Historian OLE DB
【发布时间】:2017-02-01 01:31:29
【问题描述】:

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

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

另一篇 SO 帖子表明,唯一能够连接到 OLE DB 的 Python 库是“adodbapi”(Connecting to Microsoft SQL server using Python

代码尝试(使用默认 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 wonderware


    【解决方案1】:

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

    检查事项:

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

    【讨论】:

      【解决方案2】:

      我可以通过 Linux 和 Windows 上的 sqlalchemy 和 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
      

      根据我的经验,您可以使用“受信任的连接”,但这意味着您的计算机将尝试使用其 Windows 凭据连接到服务器。如果您登录到有权访问相关数据的 Windows 机器,这些功能将起作用。在 Linux 上运行是另一回事,所以我坚持使用用户/密码组合。

      还有什么问题欢迎提问。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多