2012-09-30 5 views
9

Wykonuję kwerendę mysql w Pythonie przy użyciu pakietu MySQLdb. Kod wygląda mniej więcej tak:Uzyskaj nieprzetworzoną wartość dziesiętną z zapytania mysqldb

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

gdzie row[4] zawiera wartość dziesiętną, że chcę, aby przechowywać w wykazie output.

Problem polega na tym, że każda wartość, którą otrzymuję, wygląda tak: Decimal('XX.XX') gdzie wszystko, czego chcę na liście output, to XX.XX. Na końcu skryptu, moja lista output wygląda następująco:

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

Ale muszę to po prostu zawierać numery, tak:

[10.02, 20.24, ...] 

Jak mam to zrobić?

Dzięki!

Odpowiedz

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

to dzięki! –

5

Zastosowanie float():

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

Ale float() może spowodować coś takiego:

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

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

tak to jest ok, dzięki! –

2

Jeśli próbujesz napisać rodzajowy kod, który działa na wyjściu kolumny, powyższe rozwiązanie nie będzie treningiem. W takim przypadku możemy napisać zapytanie o numer SELECT w taki sposób, że kolumna zwróci się jako String i otrzymamy wartość tego, co chcemy. Zapytanie może być sformułowane w sposób poniżej,

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

Mały punkt, ale trzeba ucięć końcowy wiersz, aby uwzględnić go wraz z resztą formatowania segmentu kodu. – toonice