天天看點

python會計系統_在Python中進行會計的最佳實踐

我正在編寫一個web2py應用程式,需要在不損失精度的情況下彙總美元金額.我意識到我需要使用Decimals,但我發現自己必須用資料庫包裝我得到的每一個數字:

十進制(STR(設為myVal))

在我瘋狂添加到我的所有代碼之前,有更好的方法嗎?我是Python的新手,是以很有可能我忽略了一些明顯的東西.

編輯:我的資料庫是MS SQL Server,我将數量存儲在SQL Server貨币字段中(我相信實作類似于Decimal,即整數數學,而不是浮點數).

我通過web2py架構(使用pyodbc進行SQL Server連接配接)連接配接到資料庫.我相信web2py對小數類型有一些支援.例如,我的web2py字段定義如下所示:字段(‘Amount’,’decimal(19,4)’)但是,當我使用web2py的.executesql方法從資料庫傳回一個值時,它傳回值為float而不是小數.

編輯:這似乎是FreeTDS和MS SQL Server的問題.正如Massimo在評論中所說,web2py正确地支援它并傳回一個Decimal(如果可以的話).事實證明這隻是我的生産環境(Linux)中的一個問題.我使用FreeTDS驅動程式連接配接到MS SQL,它似乎正在将MS SQL錢類型轉換為python float.

我認為Alex Martelli的答案指向了正确的方向.有沒有人有FreeTDS,MS SQL和python的經驗?我認為這可能保證了自己的問題,是以我将讨論這個問題……(新問題釋出在這裡:FreeTDS translating MS SQL money type to python float, not Decimal)

更新:FreeTDS實際上存在一個錯誤.截至2010年8月4日,這是FreeTDS的fixed in the CVS head.