遇到UnixODBC,FreeTDS和PyODBC的麻烦

所以我很难让所有这三个和谐地一起工作。 我想我会列出所有的各种configuration,以及testing代码,看看是否有一双新鲜的眼睛能够实现我的愚蠢。

我正在运行12.04 Unbuntu服务器,我试图连接到MSSQL Server 2008,并最终与PyODBC一起使用它。

但是,当刚刚进入

tsql -S T2 -U Foo -P Bar 

我明白了

 1> 2> 3> 4> 5> 6> 7> 8> 9> 10> 11> 

等等。

无论如何,如果有人能够帮助(如果你能清除我的阴霾,我将永远感激),这里是我目前的configuration。

这是我的/etc/odbc.ini

 [ODBC Data Sources] odbcname = MySQL T2 = MSSQL [odbcname] Driver = /usr/lib/odbc/libmyodbc.so Description = MyODBC 3.51 Driver DSN SERVER = Foobar PORT = 3306 USER = Foo Password = Bar Database = Foobar OPTION = 3 SOCKET = [T2] Driver = FreeTDS Description = ODBC connection via FreeTDS SERVER = FOOBAR PORT = 1433 USER = Foo Password = Bar Database = Foobar OPTION = 3 SOCKET = [Default] Driver = /usr/local/lib/libmyodbc3.so Description = MyODBC 3.51 Driver DSN SERVER = FOOBAR PORT = 3306 USER = foo Password = bar Database = FOOBAR OPTION = 3 SOCKET = 

以下是我的/etc/odbcinst.ini

 [FreeTDS] Description=FreeTDS Driver Driver=/usr/lib/odbc/libtdsodbc.so Setup=/usr/lib/odbc/libtdsS.so CPTimeout= CPReuse= FileUsage=1 

以下是我的freetds.conf

 # This file is installed by FreeTDS if no file by the same # name is found in the installation directory. # # For information about the layout of this file and its settings, # see the freetds.conf manpage "man freetds.conf". # Global settings are overridden by those in a database # server specific section [global] # TDS protocol version ; tds version = 4.2 # Whether to write a TDSDUMP file for diagnostic purposes # (setting this to /tmp is insecure on a multi-user system) ; dump file = /tmp/freetds.log ; debug flags = 0xffff # Command and connection timeouts ; timeout = 10 ; connect timeout = 10 # If you get out-of-memory errors, it may mean that your client # is trying to allocate a huge buffer for a TEXT field. # Try setting 'text size' to a more reasonable limit #text size = 64512 [T2] host = FOOBAR port = 1433 tds version = 7.0 client charset = UTF-8 text size = 20971520 [global] # TDS protocol version tds version = 7.0 

而我的Pythontesting文件只是为了好的措施

 import pyodbc import sys try: #tempsystrends = pyodbc.connect('DRIVER=FreeTDS;SERVER=FOOBAR;PORT=1433;DATABASE=T2;UID=FOO;PWD=bar;TDS_Version=7.0;') cursor = tempsystrends.cursor() except pyodbc.Error as e: print "Error: %s" % (e.args[1]) sys.exit(1) 

我使用UnixODBC通过PHP连接到各种数据库,这里是我的Microsoft SQL server配置:

/etc/odbc.ini

 # Define a connection to a Microsoft SQL server # The Description can be whatever we want it to be. # The Driver value must match what we have defined in /etc/odbcinst.ini # The Database name must be the name of the database this connection will connect to. # The serverName is the name we defined in /etc/freetds/freetds.conf # The TDS_Version should match what we defined in /etc/freetds/freetds.conf [mssql] Description = MSSQL server Driver = freetds Database = XXXXXX serverName = MSSQL TDS_Version = 8.0 

/etc/odbcinst.ini

 # Define where to find the driver for the Free TDS connections. [freetds] Description = MS SQL database access with Free TDS Driver = /usr/lib/i386-linux-gnu/odbc/libtdsodbc.so Setup = /usr/lib/i386-linux-gnu/odbc/libtdsS.so UsageCount = 1 

/etc/freetds/freetds.conf

 # The basics for defining a DSN (Data Source Name) # [data_source_name] # host = <hostname or IP address> # port = <port number to connect to - probably 1433> # tds version = <TDS version to use - probably 8.0> # Define a connection to the Microsoft SQL server [mssql] host = XXXXXX port = 1433 tds version = 8.0 

然后测试你的连接:

 isql mssql username password 

根据您的环境,您的username可能必须采用格式:域\用户名

发出命令后,您应该看到如下所示的内容:

 +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL>