2016-03-16 1 views
0

У меня проблема с использованием pyobbc с сервером TeraData. Мое соединение perl, использующее одни и те же драйверы ODBC, работает без проблем.Как правильно установить кодировку/кодировку pyodbc TeraData?

Кажется, что pyodbc подключается, потому что я могу получить имена таблиц, однако имена таблиц не закодированы правильно (пример ниже). Вот список вещей, которые я пробовал:

  1. Установка кодирокой/Encoding в моем DSN как 'ASCII', 'UTF-8', и многие другие
  2. Установка локали:

    locale.setlocale (locale.LC_ALL, 'en_US.utf8')

  3. Изменение автокоммит и ANSI = True/False»в pyodbc.connect()

Python == 3.4.3, pyodbc == 3.0.10

.odbc.ini:

[ODBC] 
InstallDir=/opt/teradata/client/15.10/odbc_64 
Trace=0 
TraceDll=/opt/teradata/client/15.10/lib/odbctrac.so 
TraceFile=/home/solberg/teratrace 
TraceAutoStop=0 

[ODBC Data Sources] 
tera01=Teradata ODBC Driver 15.10 

[tera01] 
Driver=/opt/teradata/client/15.10/lib64/tdata.so 
DBCName=tera01 
Username=solberg 
Authentication=LDAP 

.odbcinst.ini:

[ODBC DRIVERS] 
Teradata=Installed 

[ODBC Translators] 
OEB to ANSI=Installed 

Python код:

import pyodbc 
pyodbc.pooling = False 
conn = pyodbc.connect('DSN=tera01;', password=pw) 

cursor = conn.cursor() 
cursor.tables() 
rows = cursor.fetchall() 

print(row[0].table_name) 

扁 牯 䱴 獩 却 獥 楳 湯

print(row[0].table_name.encode('utf_16_le')) 

b'AbortListSession '

conn.execute("SELECT DISTINCT column FROM table;").fetchall() 

Ошибка: ('HY000',' [HY000] [UnixODBC] [Driver Manager] Driver вернулся SQL_ERROR или SQL_SUCCESS_WITH_INFO но нет сообщений об ошибках API не найдено (0) (SQLExecDirectW) ')

ответ

0

не используя pyodbc, но две вещи: 1) иногда каркасов борьбы, если не все столбцы явно с именем, так что вы могли бы попробовать

SELECT DISTINCT column as d_col FROM table; 
SELECT column FROM table group by column; 

2) Вы пробовали модуль padon teradata? - В конце дня он также использует ODBC (или REST), но он инкапсулирует много неприятных вещей. (https://github.com/Teradata/PyTd)

[sudo] pip install teradata