有人能在OSX(或linux)上使用python3与Wonderware的Historian共享功能连接方法吗?
Historian显然是一个Microsoft SQL Server OLE DB(参见http://www.logic-control.com/datasheets/1/Historian/HistorianConcepts.pdf)。
SO的另一篇帖子表明,唯一能够连接到OLE DB的python库是"adodbapi"(使用python连接到Microsoft SQL server)
代码中的尝试(使用默认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(Mac上的pywin32(com对象))
小费不胜感激。我高度怀疑,在这种情况下,微软与Mac/Linux的世界是无法弥合的。
您应该能够使用Python访问MS SQL Server数据库(例如Wonderware Historian数据库)。
检查事项:
- 对于ODBC,"受信任的连接"设置应为"否"。受信任的连接意味着它尝试使用Windows身份验证登录。您希望使用用户名和密码。我认为对于OLE DB,您可以设置"集成安全性=SSPI">
- 连接字符串(用户名、服务器主机名/IP、数据库名、正确端口、语法)
- 端口(确保使用正确的端口-可能是非标准端口)
- 防火墙-确保所有防火墙都已设置为允许访问
- 如果您使用的是主机名,请确保DNS正常工作(例如,您能ping服务器吗?)
- 您可能需要为Linux和pyodbc安装ODBC驱动程序。ODBC是一个更开放的标准。正如你所指出的,OLEDB是基于COM的(例如基于Windows),所以我不确定它是否兼容
我可以在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上运行是另一回事,所以我保留了用户/密码组合。
任何问题都可以随意提出。