Столкнулся с написанием скриптов для работы на линукс-сервере с MsSQL-базой на питоне. Основная проблема - сообщение типа
pyodbc.ProgrammingError: ('42000', '[42000] [FreeTDS][SQL Server]Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier. (4004) (SQLExecDirectW)')
Как же так? Просто нужно настроить использование правильной версии драйвера.
Итак. Первое - запись о драйвере в /etc/odbcinst.ini
[FreeTDS]
Description=TDS driver
Driver=/usr/lib/libtdsodbc.so
Setup=/usr/lib/libtdsS.so
FileUsage=1
Второе - добавить запись о сервере в /etc/freetds.conf
[myServer]
host=192.168.0.2
port=1433
tds version=8.0
Особенно прошу учесть "табы" перед параметрами! У меня без них запись не срабатывала!
Третье - добавить DSN-запись в /etc/odbc.ini
[myDNS]
Description=my dsn
Driver=FreeTDS
Database=my_db
Servername=myServer
Теперь код для работы с бд выглядит так:
import pyodbc
conn = pyodbc.connect("dsn=myDSN;UID=%s;PWD=%s;" % ('sa','pass'))
cursor=conn.cursor()
cursor.execute("select 'test' as x;")
row=cursor.fetchone()
if row:
print row
Успехов!