Лучшие практики для того, чтобы сделать учет в Python

Я пишу web2py приложение, которое требует сумм в долларах подведения итогов, не теряя точность. Я понимаю, что должен использовать Десятичные числа для этого, но я имел необходимость для обертывания каждого числа, с которым я добираюсь от базы данных:

Decimal(str(myval))

Прежде чем я сойду с ума, добавляя, что ко всему моему коду, там лучший путь? Я плохо знаком с Python, таким образом, очень возможно, что я пропускаю что-то очевидное.

Править: Моя база данных является SQL Server MS, и я храню суммы в SQL Server money поля (я полагаю, что реализация походит на Десятичное число, т.е. целочисленную математику, не плавающую точку).

Я соединяюсь с дб через web2py платформу (который использует pyodbc для соединений SQL Server). Я полагаю, что web2py имеет некоторую поддержку десятичных типов. Например, мои web2py определения поля похожи: Field('Amount','decimal(19,4)') Однако, когда я возвращаю значение от базы данных с помощью web2py .executesql метод это возвращает значение как a float и не a Decimal.

Править: Это, кажется, проблема с SQL Server MS и FreeTDS. Как Massimo заявил в комментариях, web2py поддерживает это правильно и возвращает Десятичное число (если он может). Оказывается, что это - только проблема в моей продуктивной среде (Linux). Я использую драйвер FreeTDS для соединения с MS SQL, и это, кажется, переводит денежный тип SQL MS в плавание Python.

Я думаю, что ответ Alex Martelli указывает в правильном направлении. У кого-либо есть опыт с FreeTDS, MS SQL и Python? Я думаю, что это, вероятно, гарантирует его собственный вопрос, таким образом, я перемещу это обсуждение... (новый вопрос, отправленный здесь: FreeTDS, переводящий MS денежный тип SQL в плавание Python, не Десятичное)

Обновление: в FreeTDS была на самом деле ошибка. Это было зафиксировано в главе CVS FreeTDS с 4 августа 2010.

5
задан Community 23 May 2017 в 12:01
поделиться