2016-10-25 6 views
2

Я использую pyodbc для чтения числового значения из таблицы, но вместо того, чтобы просто дать мне «100», он дает мне »(десятичный (« 100,00 ») .)Pyodbc return (Decimal ('100.00'))

есть ли способ, чтобы получить только номер

Я бегу:

cursor.execute("SELECT CurrentBalance as Numeric FROM [AccountsQA].[dbo].[AccountBalance] where AccountId = '2000013' and Currency = 'ZAR'") 

Мои извинения, если это уже есть ответ, но я не смог найти как решить эту проблему.

ответ

0

мне удалось получить только номер, выполнив следующие действия:

cursor.execute("SELECT CurrentBalance as Numeric FROM [AccountsQA].[dbo].[AccountBalance] where AccountId = '2000013' and Currency = 'ZAR'") 
result = cursor.fetchall() 
amount = result[0][0] 

результата "[0]" возвращается "(Decimal ('100.00'),)", но когда я использовал результат [» 0] [0] возвращает только «100,00»

1

Предположительно ta ble определяет этот столбец как тип DECIMAL, поэтому pyodbc возвращает объект Decimal, чтобы точно представлять это значение.

Предполагая, что значение может иметь цифры после запятой, вы можете «получить только номер» по телефону float(), но вы не хотите, чтобы сделать это, если столбец представляет собой деньги (как название «CurrentBalance "предлагает). Использование значений float для представления денег - Плохая идея.

Вместо этого вам следует, скорее всего, продолжать использовать значение в виде десятичного числа.

0

было бы чище, чтобы заботиться о нем в запросе с самого начала:

cursor.execute("SELECT CAST(CurrentBalance AS INTEGER) AS Numeric FROM [AccountsQA].[dbo].[AccountBalance] WHERE AccountId = '2000013' AND Currency = 'ZAR'") 
+0

Да это было бы, если предположить, что значения в этом столбце действительно являются целые числа. Если нет, то 'CAST (... AS INTEGER)' res res ult в еще худшей «ошибке округления», чем преобразование его в 'float'. –