pyodbc.connect для подключения к FreeTDS требует явного PORT=1433;

У меня есть скрипт Python, работающий на Python 2.7 в CentOS 2.6, который подключается к базе данных Sql erver:

pyodbc.connect("DRIVER=FreeTDS;SERVER=someServer;DATABASE=someDb;UID=myUser;PWD=superSecret;CHARSET=UTF8;TDS_Version=7.2")

Этот вызов потерпит неудачу со следующим: pyodbc.Error: ('08001', '[08001] [unixODBC][FreeTDS][SQL Server]Unable to connect to data source (0) (SQLDriverConnect)')

След freetds скажет login.c:436:invalid port number

Добавление PORT=1433; приведет к успешному соединению, даже если это номер порта по умолчанию, и я добавил следующее в мой freetds.conf:

[global] # версия протокола TDS tds version = 7.0 port = 1433

Как заставить FreeTDS использовать порт 1433 в качестве порта по умолчанию, чтобы мне не приходилось устанавливать его в строке запроса?

1 ответ

Вместо этого, как вы заметили,

pyodbc.connect("DRIVER=FreeTDS;SERVER=someServer;DATABASE=someDb;UID=myUser;PWD=superSecret;CHARSET=UTF8;TDS_Version=7.2")

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

pyodbc.connect("DRIVER={FreeTDS};SERVER=someServer;PORT=1433;DATABASE=someDb;UID=myUser;PWD=superSecret;TDS_Version=7.2;CHARSET=UTF8")

Для вашей конфигурации freetds.conf:

[global]
    client charset = UTF-8
    tds version = 7.2

[someServer]
    host = someServer
    port = 1433
    tds version = 7.2

Оба способа всегда работали для меня.

Кроме того, я начал использовать этот драйвер, созданный Microsoft специально для RedHat и CentOS (хотя я не знаю, будет ли он работать на версии, более старой, чем ваша):

https://msdn.microsoft.com/en-us/library/hh568451%28v=sql.110%29.aspx

Удачи!

Другие вопросы по тегам