подключиться к OLE DB Wonderware Historian с помощью python 3 и OSX или Linux

Может ли кто-нибудь поделиться функциональным методом подключения к Wonderware Historian с использованием python3 в OSX (или Linux)?

Historian, по-видимому, представляет собой OLE DB Microsoft SQL Server (см. стр. 102 на http://www.logic-control.com/datasheets/1/Historian/HistorianConcepts.pdf).

В другом сообщении SO предполагается, что единственная доступная библиотека Python, способная подключаться к OLE DB, — это «adodbapi» (Подключение к серверу Microsoft SQL с помощью 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-объекты) на Mac)

Советы приветствуются. Я очень подозреваю, что миры Microsoft и Mac/Linux просто не могут быть соединены мостом в этой ситуации.


person Ziggy Eunicien    schedule 01.02.2017    source источник


Ответы (2)


Вы должны иметь доступ к базе данных MS SQL Server (например, к базе данных Wonderware Historian) с помощью Python.

Что нужно проверить:

  • Для ODBC параметр «Надежное соединение» должен быть «Нет». Надежное соединение означает, что оно пытается использовать проверку подлинности Windows для входа в систему. Вместо этого вы хотите использовать имя пользователя и пароль. Я думаю, что для OLE DB вместо этого вы устанавливаете «Integrated Security = SSPI».
  • Строка подключения (имя пользователя, имя хоста/IP сервера, имя базы данных, правильный порт, синтаксис)
  • Порт (убедитесь, что вы используете правильный порт — это может быть нестандартный порт)
  • Брандмауэры — убедитесь, что все брандмауэры настроены для разрешения доступа
  • Если вы используете имя хоста, убедитесь, что DNS работает (например, можете ли вы пропинговать сервер?)
  • Возможно, вам потребуется установить драйвер ODBC для Linux и pyodbc. ODBC является более открытым стандартом. Как вы указали, OLEDB основан на COM (например, на основе Windows), поэтому я не уверен, будет ли он совместим.
person Taraz    schedule 18.02.2017

Я могу получить доступ к серверу Wonderware, используя Python3, как через sqlalchemy, так и через pyodbc в Linux и Windows — у меня нет 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 — это отдельная история, поэтому я придерживаюсь комбинации «пользователь/пароль».

Любые вопросы, не стесняйтесь спрашивать.

person cbcoutinho    schedule 14.11.2017