Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Python (http://www.velocityreviews.com/forums/f43-python.html)
-   -   mysqldb cursor returning type along with result ? (http://www.velocityreviews.com/forums/t707017-mysqldb-cursor-returning-type-along-with-result.html)

Paul O'Sullivan 11-29-2009 01:14 PM

mysqldb cursor returning type along with result ?
 
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 11-29-2009 01:54 PM

Re: mysqldb cursor returning type along with result ?
 
> ((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 11-29-2009 03:57 PM

Re: mysqldb cursor returning type along with result ?
 
On 11/30/2009 12:14 AM, Paul O'Sullivan wrote:
> 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'.?


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

sum(x[0] for x in result)


All times are GMT. The time now is 09:30 AM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.