使用 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 组合。
还有什么问题可以尽管问。
任何人都可以在 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 组合。
还有什么问题可以尽管问。