Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

mysqldb cursor returning type along with result ?

3 views
Skip to first unread message

Paul O'Sullivan

unread,
Nov 29, 2009, 8:14:43 AM11/29/09
to
Just taken to Python (2.5)and started to look at some DB cursor stuff
using MySQL. Anyway, after creating a query that in MySQL that has a
result set of decimals I find that the cursor in python after a
fetchall() returns a tuple that contains the following ::

((Decimal("101.10"),), (Decimal("99.32"),), (Decimal("97.95"),),
(Decimal("98.45"),), (Decimal("97.39"),), (Decimal("97.91"),), (Decimal
("98.08"),), (Decimal("97.73"),))

as such :
sum(result)
fails with "TypeError: unsupported operand type(s) for +: 'int' and
'tuple'"

How do I either get the resultset back as 'float' or convert the
returned tuple to 'floats'.?

Thanks, Newb.

Tim Chase

unread,
Nov 29, 2009, 8:54:35 AM11/29/09
to Paul O'Sullivan, pytho...@python.org
> ((Decimal("101.10"),), (Decimal("99.32"),), (Decimal("97.95"),),
> (Decimal("98.45"),), (Decimal("97.39"),), (Decimal("97.91"),), (Decimal
> ("98.08"),), (Decimal("97.73"),))
>
> as such :
> sum(result)
> fails with "TypeError: unsupported operand type(s) for +: 'int' and
> 'tuple'"
>
> How do I either get the resultset back as 'float' or convert the
> returned tuple to 'floats'.?

Well, what you have is a tuple-of-tuples-of-decimals, and Sum can
handle Decimal types just fine. You simply have to extract the
first (only) item in each row:

sum(row[0] for row in result)

or

sum(value for (value,) in result)

whichever makes more sense to you.

-tkc

Lie Ryan

unread,
Nov 29, 2009, 10:57:35 AM11/29/09
to

I believe it returned decimal.Decimal() objects. You can do arithmetic
with decimal.Decimals, so:

sum(x[0] for x in result)

0 new messages