Search code examples
pythonmysqlmysql-python

get raw decimal value from mysqldb query


I am executing a mysql query in python using the MySQLdb package. The code looks something like this:

c=db.cursor()
c.execute("""select * from table""")
output = []
for row in c:
    output.append(row[4])

where row[4] contains a decimal value that I want to store in the output list.

The problem is every value that I am getting looks like this: Decimal('XX.XX') where all I want in the output list is XX.XX. At the end of the script, my output list looks like this:

[Decimal('10.02'), Decimal('20.24'), ...]

But I need it to just contain the numbers, like this:

[10.02, 20.24, ...]

How do I do that?

Thanks!


Solution

  • 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])