Ошибки при подключении к MSSQL с использованием turbodbc - PullRequest
0 голосов
/ 07 июня 2019

Я не могу подключиться, используя значения, считанные из файла конфигурации.

Это в Windows, подключение к SQL Server 2008r2 на той же машине с использованием Python 3.6.

Это работает:

conn = p.connect(driver = '{SQL Server Native Client 11.0}', server = 'SERVERNAME',port = '1433',database = 'DATABASE',uid = 'USERNAME',pwd = 'PASSWORD')

Я хочу использовать строку подключения из файла конфигурации, используя configParser, и могу сделать это успешно, используя pyodbc.Однако я не могу сделать это с помощью turbodbc.Единственный способ установить соединение с использованием turbodbc - это использовать DSN или длинный формат, показанный здесь (все колпачки являются просто заполнителями, а не переменными).

Ошибка, которая всегда , возвращается:

"Состояние ошибки ODBC: собственный код ошибки IM010: 0 сообщение: [Microsoft] [ODBC Driver Manager] Слишком длинное имя источника данных"

Это мой первый раз, когда я используюэтот пакет и он великолепен, за исключением этой проблемы.

Может быть проблема с noob, но сбивает с толку, почему соединения работают только с использованием переменных в коде или DSN.Делает написание кода неудобным и не очень динамичным для использования в нескольких средах (dev, test, prod).Соединения зависят от среды.

1 Ответ

0 голосов
/ 08 июня 2019

Вы можете создать простую функцию для построения строки подключения на основе содержимого файла конфигурации. Например, если «example.ini» содержит

[DEFAULT]
driver=ODBC Driver 17 for SQL Server
database=myDb

[development]
server=localhost

[test]
server=192.168.0.179,49242

тогда вы можете просто использовать такой код

import configparser


def get_connection_string(environment):
    config = configparser.ConfigParser()
    config.read('example.ini')
    return ';'.join([x + '=' + config[environment][x] for x in config[environment]])


print(get_connection_string('development'))
# server=localhost;driver=ODBC Driver 17 for SQL Server;database=myDb

print(get_connection_string('test'))
# server=192.168.0.179,49242;driver=ODBC Driver 17 for SQL Server;database=myDb
...