Ошибка Юникода SQLAlchemy - Запрос базы данных Teradata - PullRequest
0 голосов
/ 25 апреля 2018

Я пытаюсь использовать библиотеку Python SQLAlchemy для запроса базы данных Teradata. Я смог создать движок, используя следующий код.

from sqlalchemy import create_engine

td_engine = create_engine('teradata://' + 'usrname' + ':' + 'pswrd' + '@' + 'myOdbcDataSource' + ':22/?charset=UTF8')

Но когда я пытаюсь использовать двигатель, я получаю следующую ошибку.

ValueError: символ U + 590048 не находится в диапазоне [U + 0000; U + 10FFFF]

Эта ошибка возникает при использовании всех функций, которые взаимодействуют с базой данных, которые я пробовал. Например, я получаю эту ошибку, когда пытаюсь выполнить следующее.

sqlStr = 'select top 1000 * from myTable;' result = td_engine.execute(sqlStr)

В качестве другого примера я получаю ту же ошибку при попытке выполнить следующее.

td_engine.table_names('mySchema')

Журнал непосредственно перед ошибкой указывает на подключение к базе данных с использованием драйвера ODBC, поэтому мне интересно, связано ли это с тем, как я настроил драйвер ODBC. Ниже мой файл odbc.ini, расположенный в / Library / ODBC / на моем Mac.

[ODBC Data Sources]
myodbca       = MySQL ODBC 5.3 ANSI Driver
myodbc        = MySQL ODBC 5.3 Unicode Driver
myOdbcDataSource        = Teradata Database ODBC Driver 16.20

[myOdbcDataSource]
Driver                = /Library/Application Support/teradata/client/16.20/lib/tdataodbc_sbu.dylib
DBCName               = myUrl
DefaultDatabase       = myDb
UserName              = usrname
Password              = pswrd
CharacterSet          = UTF8

У кого-нибудь есть идеи, как исправить эту ошибку Unicode и заставить работать движок SQL Alchemy Teradata? Заранее спасибо.

1 Ответ

0 голосов
/ 11 мая 2018

Попробуйте настроить кодировку на UTF8:

from os import environ

environ["NLS_LANG"] = ".AL32UTF8"
...