21

MySQLdb パッケージを使用して、python で mysql クエリを実行しています。コードは次のようになります。

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

whererow[4]には、リストに格納する 10 進数の値が含まれていoutputます。

問題は、取得しているすべての値が次のようになっていることです。リストDecimal('XX.XX')に必要なのoutputは XX.XX だけです。スクリプトの最後で、outputリストは次のようになります。

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

しかし、次のように数字だけを含める必要があります。

[10.02, 20.24, ...]

それ、どうやったら出来るの?

ありがとう!

4

4 に答える 4

19

Decimal オブジェクトを文字列に変換できます。

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

またはフロートに:

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

float に変換すると完全な精度が失われるため、20.24 のような値は 20.239999999999998 になります。

また、値が の場合、float にキャストすると Exception が発生しますNone。これを回避するには、次のようなヘルパー関数を使用できます。

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])
于 2012-09-30T14:33:46.530 に答える
7

使用float():

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

しかしfloat()、次のような結果になる可能性があります。

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

In [185]: float(Decimal('20.24'))
Out[185]: 20.239999999999998
于 2012-09-30T14:33:11.803 に答える
6

列の出力で動作する一般的なコードを作成しようとしている場合、上記の解決策はうまくいきません。その場合SELECT、列が文字列として返されるようにクエリを記述し、必要な値を取得するだけです。クエリは以下の方法で構成できます。

SELECT 
 CAST(COL1 AS CHAR) AS COL1,
 CAST(COL2 AS CHAR) AS COL2,
 .
 .
 .
FROM TABLE;
于 2016-07-21T09:41:32.357 に答える