替换所有游标行中的值
我在用SQLite和Python 3.1,想通过一个模板把货币数据展示在HTML表格里,这个模板需要一个游标作为参数。所以所有的货币值都得保留两位小数,但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' object does not support item assignment”,意思是说行对象的值不能被改变。
我该怎么解决这个问题呢?我能不能把游标转换成一个字典列表(每一行一个字典,比如 [{'order_no':1, 'amount':12.1}, {'order_no':2, 'amount':6.32}, ...]),然后格式化每个项目的'amount'值?如果可以的话,我该怎么做呢?
有没有更好的方法来实现我的目标?任何帮助都非常感谢。
谢谢,
Alan
2 个回答
1
另一种方法是把你的金额存储为整数形式的美分(这样总是能精确表示,没有四舍五入的问题),然后在生成报告时用 divmod 函数转换成美元来显示:
>>> value_in_cents = 133
>>> print "$%d.%d" % divmod(value_in_cents,100)
$1.33
10
没错:
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')
还有其他方法,但这个方法看起来是最简单、最直接的。