2012-09-30 6 views
9

Ich führe eine MySQL-Abfrage in Python mit dem MySQLdb-Paket. Der Code sieht etwa so aus:erhalten raw Dezimalwert von mysqldb Abfrage

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

wo row[4] einen Dezimalwert enthält, die ich in der output Liste speichern möchten.

Das Problem ist, dass jeder Wert, den ich bekomme, so aussieht: Decimal('XX.XX') wo alles, was ich will in der output Liste ist XX.XX. Am Ende des Skripts, meine output Liste sieht wie folgt aus:

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

Aber ich muss es nur die Zahlen enthalten, wie folgt aus:

[10.02, 20.24, ...] 

Wie mache ich das?

Danke!

Antwort

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

das ist es danke! –

5

Verwendung float():

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

Aber float() kann wie in etwas führen:

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

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

ja das ist ok, danke! –

2

Wenn Sie versuchen, eine generische Code zu schreiben, die auf den Spaltenausgang arbeitet, die oben Lösung wird nicht trainieren. In diesem Fall können wir unsere SELECT Abfrage in einer Weise schreiben, dass die Spalte in als String zurückgegeben wird und wir nur den Wert dessen erhalten, was wir wollen. Die Abfrage kann in folgenden Art und Weise,

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) 

eingerahmt werden;)

+0

Kleiner Punkt, aber Sie müssen die letzte Zeile einrücken, um sie in die Formatierung des restlichen Codes einzufügen. – toonice