2017-01-18 2 views
1

sqliteからの出力を使って何かをすることに一貫して苦労します。例えば、私のカラムのうちのいくつかを選択しました。形式:Pythonのsqlite。 REALの値をfloatにして計算に使用し、strとしてTEXTを引っ張って連結します。

[(0.0,), (10.0,), (2.5,), (15.0,), (1.25,), (0.0,), (0.0,), (1.25,), (0.0,), (None,)] 

だから、=そのデータ、今私は値を合計したいが、私はカント:

b = sum(a) 

それは私に語ったので、私は整数とタプルにまとめるカント(なぜそのunlcearエラーで浮動小数点でintを言って、とにかく私はなぜタプルがOKであるか理解することができます)。

私たちはsqliteの中でこれを行うことができます参照してください。

a = c.execute('select SUM(values) from TABLE').fetchall() 

をしかし、それはまだ私にフロートを与えるdoesntが、それは形式で提供されます:

[(30.0,)] 

だから、そのシンプルな、私はちょうど私が欲しいです浮動小数点数がREALのときはsqliteの結果、TEXTのときは文字列のリストとして返されます。これは標準的な要求のようですが、そのどこでどのように行われたかの明確な例は見つかりません。

ありがとうございました。

+1

あなたの例ではTEXT値は表示されません。 – arekolek

+0

'a [0] [0]'を試してみると、 '30.0'が得られるので、float値になります。 – metmirr

+0

だから、私は合計の前に値のリストを取得するには、私も抽出が必要です。 – Scalextrix

答えて

0

クエリは、結果をテーブルの形式、つまり行のリストとして返します。各行は列の値を含むタプルです。 クエリが単一の値のみを返す場合でも、これは当てはまります。

値を抽出すると、あなたは、ヘルパー関数を使用するにはあまりにも面倒であれば:

def query_single_value(db, sql, params=()): 
    return db.execute(sql, params).fetchone()[0] 

zipを使用し、単一の列からすべての値を抽出するには:

def query_single_column(db, sql, params=()): 
    return zip(*db.execute(sql, params).fetchall())[0] 

やリストの内包:

def query_single_column(db, sql, params=()): 
    return [row[0] for row in db.execute(sql, params)] 
+0

これはうまくいったと思っていますが、それでもタプルを与えます: (30.0、) – Scalextrix

+0

どちら〜について話してるの? –

+0

カラムは次のようになります:(0.0,10.0,2.5,15.0,1.25,0.0,0.01,2.0,0.0,1なし) – Scalextrix

関連する問題