代码之家  ›  专栏  ›  技术社区  ›  mwolfe02

用Python做会计的最佳实践

  •  5
  • mwolfe02  · 技术社区  · 14 年前

    Decimal(str(myval))

    在我疯狂地将它添加到所有代码之前,有没有更好的方法?我是Python新手,所以很可能我忽略了一些显而易见的东西。

    :我的数据库是MS SQL Server,我正在SQL Server中存储金额 money

    我通过web2py框架(使用 pyodbc Field('Amount','decimal(19,4)') 但是,当我使用web2py的 .executesql 方法返回值作为 float 而不是一个 Decimal .

    编辑 :这似乎是FreeTDS和MS SQL Server的问题。正如Massimo在评论中所说的,web2py正确地支持这一点,并返回一个十进制数(如果可以的话)。原来这只是我的生产环境(Linux)中的一个问题。我正在使用FreeTDS驱动程序连接到mssql,它似乎正在将mssqlmoney类型转换为python float。

    我认为亚历克斯·马尔泰利的回答是正确的。有人对FreeTDS、mssql和python有经验吗?我想这可能是它自己的问题,所以我将把这个讨论(新问题发布于此处: FreeTDS translating MS SQL money type to python float, not Decimal )

    :实际上FreeTDS中有一个bug。这是 fixed in the CVS head 截至2010年8月4日的免费TDS。

    2 回复  |  直到 8 年前
        1
  •  8
  •   Alex Martelli    14 年前

    here 是MySQL的 DECIMAL 键入文档。我希望你已经这么做了,但是,如果你不这么做,那就太好了 值得模式改变的痛苦。

    conv= connect ,称为“类型转换器字典”--默认值是 MySQLdb.converters.conversions 当然,你也可以用小数来充实它。如果您告诉我们您使用的是哪种DB,以及您喜欢哪种DB-API连接器软件包,我们可能会在这个问题上给您提供更详细的帮助。

    编辑 :@unutbu在一条评论中说,当前的MySQLdb转换器已经正确地翻译了小数,因此,除非你坚持使用MySQLdb的一个非常旧的版本,否则只要你在DB中正确地将所有的数字保留为十进制,就应该没问题(耶!)。

        2
  •  0
  •   Alex Bliskovsky    14 年前

    推荐文章