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
Удачи!