Невозможно подключиться к экземпляру SQL Server с помощью FreeTDS ODBC

Я пытаюсь подключиться к серверу microsoft sql

Я использую pyodbc с FreeTDS.

Мой сценарий:

import pyodbc
cnxn = pyodbc.connect(
    'DRIVER={FreeTDS};SERVER=myServerAdress;INSTANCE =myInstanceName;PORT=myPortNumber;DATABASE=myDatabasename;UID=myUserName;PWD=myPassword')

cursor = cnxn.cursor()

Сервер найден, но я получаю сообщение об ошибке:

pyodbc.ProgrammingError: ('42000', "[42000] [unixODBC][FreeTDS][SQL Server]Fehler bei der Anmeldung für den Benutzer 'myUserName'. (18456) (SQLDriverConnect)")

Я думаю, что переведенное сообщение об ошибке выглядит так:

Fehler bei der Anmeldung für den Benutzer 'myUserName' = Ошибка входа для пользователя myUserName.

Поэтому я подумал, что имя пользователя или пароль были неправильными. Но подключение с теми же учетными данными через tsql работает нормально.

tsql -S MyServerDSN -U myUsername -P myPassword

с участием

[MyServer]
host = myServername
instance = myInstanceName

работает нормально, и я могу выбрать myDatabaseName и получить результаты.


person HrkBrkkl    schedule 04.09.2018    source источник


Ответы (1)


Внимательно прочтите документацию по атрибутам подключения FreeTDS ODBC. Атрибут INSTANCE= отсутствует. Это говорит

Чтобы указать экземпляр Microsoft SQL Server, используйте форму server\instance.

Это работает для меня:

cnxn_str = (
    r'DRIVER=FreeTDS;'
    r'SERVER=192.168.1.128\SQLEXPRESS;'
    r'DATABASE=myDb;'
    r'UID=sa;PWD=whatever;'
)
cnxn = pyodbc.connect(cnxn_str)

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

person Gord Thompson    schedule 04.09.2018
comment
Большое спасибо за быструю помощь. Особенно ваше последнее предложение дало мне больше понимания. Удалось подключиться. - person HrkBrkkl; 04.09.2018
comment
Также убедитесь, что база данных уже существует. если не подключитесь к tsql и запустите 1 ›CREATE DATABASE myDB; 2 ›вперед - person Patrick; 05.04.2020