2013-06-04 13 views
10

Quindi ho grandi difficoltà a riunire tutti e tre questi elementi in armonia. Immagino che elencherò tutte le varie configurazioni, insieme al codice di test per vedere se un paio di occhi nuovi possono realizzare la mia stupidità.Problemi con UnixODBC, FreeTDS e PyODBC

Sto eseguendo 12.04 Unbuntu Server e sto provando a connettermi a MSSQL Server 2008 e ho finito per usarlo con PyODBC.

Tuttavia, quando solo mettendo in

tsql -S T2 -U Foo -P Bar 

ho la

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

ed ecc

In ogni caso, se qualcuno sarebbe in grado di aiutare (e sarei eternamente grato se riesci a liberarmi di questa foschia), ecco le mie attuali configurazioni.

Questo è il mio /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  = 

Il seguente è il mio /etc/odbcinst.ini

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

Di seguito è riportato il mio 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 

E il mio file di prova Python solo per buona misura

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) 

risposta

13

mi collego alle varie banche dati tramite PHP utilizzando UnixODBC, qui è la mia configurazione di un 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 

Poi testare la connessione:

isql mssql username password 

In base all'ambiente tuo username potrebbe dover essere nel formato: dominio \ nomeutente

Dopo il rilascio del comando che si dovrebbe vedere qualcosa come:

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

WOW. Questa è forse la risposta più completa che abbia mai letto su Stack Overflow. Cambiare solo la posizione per 64 bit in /etc/odbcinst.ini: /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so – philshem

+1

@philshem - grazie, sono contento che sia stato utile! –

+2

La risposta più completa finora! – digz6666

Problemi correlati