get raw decimal value from mysqldb query
Use float()
:
output.append(float(row[4]))
But float()
can result in something like:
In [184]: float(Decimal('10.02'))
Out[184]: 10.02
In [185]: float(Decimal('20.24'))
Out[185]: 20.239999999999998
You can either convert a Decimal object to a string:
cursor = db.cursor()
cursor.execute("""select * from table""")
output = []
for row in cursor:
output.append(str(row[4]))
Or to a float:
cursor = db.cursor()
cursor.execute("""select * from table""")
output = []
for row in cursor:
output.append(float(row[4]))
Converting it to a float will cause it to lose its full precision, so a value like 20.24 will become 20.239999999999998.
Also, casting it to a float will raise an Exception if the value is None
. To avoid that, you can use a helper function like this:
def convert_mysql_decimal_to_float(decimal_object):
if (decimal_object == None):
return None
else:
return float(decimal_object)
cell_value = convert_mysql_decimal_to_float(row[4])
If you are trying to write a generic code that operates on the column output, the above solution won't workout. In that case we can write our SELECT
query in a way that the column in returned as String and we just get the value of what we want.
The query can be framed in below way,
SELECT
CAST(COL1 AS CHAR) AS COL1,
CAST(COL2 AS CHAR) AS COL2,
.
.
.
FROM TABLE;