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 комментария:
Под той-же ОС, но под питоном 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))
И далее все хорошо.
Отправить комментарий