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)
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
@philshem - grazie, sono contento che sia stato utile! –
La risposta più completa finora! – digz6666