среда, 3 марта 2010 г.

Настройка работы с MSSQL с линукса (CentOS 5)

Столкнулся с написанием скриптов для работы на линукс-сервере с 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

Успехов!

2 комментария:

zar комментирует...
Этот комментарий был удален автором.
zar комментирует...

Под той-же ОС, но под питоном Python 2.4.3 не смог сделать через odbc.ini - не хочет имя сервера читать. Но обошелся по другому:

conn = pyodbc.connect("DRIVER={FreeTDS};SERVER=%s;UID=%s;PWD=%s;dbname=%s;TDS_Version=8.0;" % (SERVER,UID,PASS,DBNAME))


И далее все хорошо.