Замена значения во всех строках курсора - PullRequest
4 голосов
/ 01 августа 2010

Используя SQLite и Python 3.1, я хочу отображать данные валют в HTML-таблице через.шаблон, который принимает курсор в качестве параметра.Следовательно, все значения валюты должны иметь 2 десятичных знака, но SQLite сохраняет их как тип с плавающей запятой (даже если структура имеет десятичное число :-(), поэтому некоторые должны быть преобразованы перед отображением (например, я хочу, чтобы 12.1 отображалось как 12.10).1002 * Код выглядит примерно так (упрощенно для иллюстрации) ...

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}, ...]), затем отформатируйте значение 'amount' для каждого элемента? Если да, то как я могу это сделать?

Есть ли лучшие решения для достижения моей цели? Любая помощь будет оценена.

TIA, Alan

Ответы [ 2 ]

7 голосов
/ 01 августа 2010

Yep:

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 голос
/ 01 августа 2010

Альтернативой является сохранение значения в виде целого числа центов (которое всегда является точной суммой, без округления), а затем преобразование в доллары при отображении отчетов с использованием divmod:

>>> value_in_cents = 133
>>> print "$%d.%d" % divmod(value_in_cents,100)
$1.33
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...