What's causing 'unable to connect to data source' for pyodbc? What's causing 'unable to connect to data source' for pyodbc? python python

What's causing 'unable to connect to data source' for pyodbc?


I try with:

  • MS SQL 2008 Datacenter
  • Ubuntu 12.04 TLS (amd64)
  • Python 2.7

And this works for me:

Test connection:

tsql -H 10.19.4.42 -p 1433 -U DAVIDG -P 123456

on /etc/odbcinst.ini add:

[ODBC]Trace = YesTraceFile = /tmp/odbc.log[FreeTDS]Description = TDS driver (Sybase/MS SQL)Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.soSetup =  /usr/lib/x86_64-linux-gnu/odbc/libtdsS.soUsageCount = 1

on /etc/odbc.ini add:

[SQLDemo]Description=my dsnDriver=FreeTDSDatabase=teste3Servername=SQLDemo

on /etc/freetds/freetds.conf add:

[SQLDemo]        host = 10.19.4.42        port = 1433        tds version = 8.0

test with test.py:

#!/usr/bin/pythonimport pyodbccnx = pyodbc.connect("DSN=SQLDemo;UID=DAVIDG;PWD=123456")cursor = cnx.cursor()cursor.execute("select * from Company;")for row in cursor:  print row.Name


I had the same problem and I found out that it was missing the TDS_Version parameter in the call to connect(). The following code works for me to connect to an instance of MS SQL Server 2008:

import pyodbcdriver = '/opt/local/lib/libtdsodbc.so' # Change this to where FreeTDS installed the driver libaray!conn = pyodbc.connect(    driver = driver,    TDS_Version = '7.2', # Use for    server = '<hostname or ip address>',    port = 1433,    database = '<database>',    uid = '<uid>',    pwd = '<pwd>')


After hours of going in circles it turns out all I was missing was

TDS_Version = 8.0in the DSN in my odbc.ini file.

I had specified it elsewhere, but it needed to be here, too, apparently.

Hope this helps some other poor soul.