2012-09-30 30 views
9

Estoy ejecutando una consulta mysql en python usando el paquete MySQLdb. El código es como la siguiente:obtener el valor decimal sin procesar desde la consulta mysqldb

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

donde row[4] contiene un valor decimal que desea almacenar en la lista output.

El problema es que cada valor que obtengo se ve así: Decimal('XX.XX') donde todo lo que quiero en la lista output es XX.XX. Al final de la secuencia de comandos, mi lista output se ve así:

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

pero necesito que sólo contiene los números, así:

[10.02, 20.24, ...] 

¿Cómo hacer eso?

Gracias!

Respuesta

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

eso es todo gracias! –

5

Uso float():

output.append(float(row[4])) 

Pero float() puede desembocar en algo como:

In [184]: float(Decimal('10.02')) 
Out[184]: 10.02 

In [185]: float(Decimal('20.24')) 
Out[185]: 20.239999999999998 
+0

sí, esto está bien, gracias! –

2

Si usted está tratando de escribir un código genérico que opera en la salida de la columna, lo anterior la solución no se ejercitará En ese caso, podemos escribir nuestra consulta SELECT de forma que la columna en retorne como String y obtengamos el valor de lo que queremos. La consulta se puede enmarcar en el camino a continuación,

SELECT 
CAST(COL1 AS CHAR) AS COL1, 
CAST(COL2 AS CHAR) AS COL2, 
. 
. 
. 
FROM TABLE; 
1
c=db.cursor() 
c.execute("""select * from table""") 
output = [] 
for row in c: 
    row_data = [] 
    for data in row: 
     if type(data) is Decimal: 
      row_data.append(float(data)) 
     else: 
      row_data.append(str(dat)) 
    output.append(row_data) 

;)

+0

Pequeño punto, pero debe aplicar sangría a la línea final para incluirlo con el resto del formato del segmento de código. – toonice

Cuestiones relacionadas