Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 14, 2010 07:53:40

da4nik
От:
Зарегистрирован: 2010-07-04
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Oracle ODBC и запятая

Здравствуйте !

Есть проблема. Имею в наличии Оракл8, в настройки которого не имею возможности лазить. В настройках там стоит разделитель десятичного разряда запятая, что при использовании с питонскими модулями типа pyODBC и ceODBC выливается в проблему преобразования чисел в десятичной точкой в ошибку decimal.InvalidOperation: Invalid literal for Decimal: ‘16,01’.

Вычитал что надо менять сессию alter session set NLS_NUMERIC_CHARACTERS='.,', но выполнив cursor.execute(“alter session set NLS_NUMERIC_CHARACTERS='.,'”); никакого положительного эффекта не получаю :(

Если все это воспроизводить в SQL*Plus ораклячем, то все меняется как надо.

Подскажите куда копать или что я не так делаю.



Офлайн

#2 Дек. 14, 2010 08:16:55

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Oracle ODBC и запятая

А commit делали?



Офлайн

#3 Дек. 14, 2010 08:28:51

da4nik
От:
Зарегистрирован: 2010-07-04
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Oracle ODBC и запятая

Да, делал, приведу кусок кода, ну точнее весь код теста :)

    connection = ceODBC.connect("DSN=supermag;UID=***;PWD=***")
cursor = connection.cursor()
cursor.execute("alter session set NLS_NUMERIC_CHARACTERS='.,'");
connection.commit()
cursor.execute("Тут запрос с выбокой")
for c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12 in cursor:
print "Values:", c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12
получаю ошибку:

Traceback (most recent call last):
File "C:\Documents and Settings\da4nik\workspace\smexport\src\main.py", line 44, in <module>
ceodbc_test()
File "C:\Documents and Settings\da4nik\workspace\smexport\src\model\support.py", line 130, in ceodbc_test
for c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12 in cursor:
File "C:\Temp\da4nik\Python26\lib\decimal.py", line 545, in __new__
"Invalid literal for Decimal: %r" % value)
File "C:\Temp\da4nik\Python26\lib\decimal.py", line 3719, in _raise_error
raise error(explanation)
decimal.InvalidOperation: Invalid literal for Decimal: '16,01'



Офлайн

#4 Дек. 14, 2010 09:35:03

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Oracle ODBC и запятая

cx_oracle имеет inputtypehandler/outputtypehandler в connection, которыми можно скрутить мозги у Decimal.
Как это делать для ceODBC - понятия не имею



Офлайн

#5 Дек. 14, 2010 12:16:02

da4nik
От:
Зарегистрирован: 2010-07-04
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Oracle ODBC и запятая

Спасибо за наводку :) нашел аналогичную фигню в pyodbc, называется add_output_converter, но там не получилось подобрать тип данных, чоб забиндить. Может ещё не вполне работает.



Офлайн

#6 Дек. 14, 2010 14:43:00

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Oracle ODBC и запятая

Не знаю. Мне попробовать не на чем.
Пример для cx_oracle есть в недрах sqlalchemy



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version