Найти - Пользователи
Полная версия: Oracle ODBC и запятая
Начало » Базы данных » Oracle ODBC и запятая
1
da4nik
Здравствуйте !

Есть проблема. Имею в наличии Оракл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 ораклячем, то все меняется как надо.

Подскажите куда копать или что я не так делаю.
Андрей Светлов
А commit делали?
da4nik
Да, делал, приведу кусок кода, ну точнее весь код теста :)
    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'
Андрей Светлов
cx_oracle имеет inputtypehandler/outputtypehandler в connection, которыми можно скрутить мозги у Decimal.
Как это делать для ceODBC - понятия не имею
da4nik
Спасибо за наводку :) нашел аналогичную фигню в pyodbc, называется add_output_converter, но там не получилось подобрать тип данных, чоб забиндить. Может ещё не вполне работает.
Андрей Светлов
Не знаю. Мне попробовать не на чем.
Пример для cx_oracle есть в недрах sqlalchemy
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB