使用SQLite和Python 3.1,我希望通过HTML表格显示货币数据。接受游标作为参数的模板。因此,所有货币值必须有2个小数位,但SQLite将它们存储为浮点类型(即使结构表示十进制:-(),因此有些必须在显示之前进行转换(例如,我希望12.1显示为12.10)。
代码就像这样(为了说明而简化)......
import sqlite3
con = sqlite3.connect("mydb")
con.row_factory = sqlite3.Row
cur = con.cursor()
cur.execute("select order_no, amount from orders where cust_id=123")
for row in cur:
row['amount'] = format(row['amount'],'%.2f')
最后一个命令抛出错误“#builtins.TypeError:'sqlite3.Row'对象不支持项目分配”
如何解决无法更改行对象值的问题?我可以将光标转换为字典列表(每行一个,例如。[{'order_no':1,'amount':12.1},{'order_no':2,'amount':6.32},... ]),然后格式化每个项目的'金额'值?如果是这样,我该怎么做?
有没有更好的解决方案来实现我的目标?任何帮助将不胜感激。
TIA, 艾伦
答案 0 :(得分:7)
是的:
cur.execute("select order_no, amount from orders where cust_id=123")
dictrows = [dict(row) for row in cur]
for r in dictrows:
r['amount'] = format(r['amount'],'%.2f')
还有其他方法,但这个方法似乎是最简单和最直接的方式。
答案 1 :(得分:1)
另一种方法是将您的值存储为整数分数(总是精确数量,不进行舍入),然后在使用divmod显示报表时转换为美元:
>>> value_in_cents = 133
>>> print "$%d.%d" % divmod(value_in_cents,100)
$1.33