web-dev-qa-db-ja.com

PythonでSQLiteクエリから単一の結果を取得する方法は?

python 2.7を使用しているときにSQLite SELECTクエリから単一の結果を取得するエレガントな方法はありますか?

例えば:

conn = sqlite3.connect('db_path.db')
cursor=conn.cursor()
cursor.execute("SELECT MAX(value) FROM table")

for row in cursor:
    for elem in row:
        maxVal = elem

これらのネストされたforsを回避し、値を直接取得する方法はありますか?私はもう試した

maxVal = cursor[0][0]

成功せずに。

28
iliaden

Cursor.fetchone() を探していると思います:

cursor.fetchone()[0]
57
mouad

または、SQLを指定してスカラー結果を返すラッパー関数を作成することもできます。

def get_scalar_result(conn, sql):
    cursor=conn.cursor()
    cursor.execute(sql)

    return cursor.fetchone()[0]

上記の構文的に正しいPythonよりも少ない可能性があることをおIびしますが、アイデアが得られることを願っています。

4
J. Polfer

cursor.fetchoneが組み込まれているpysqliteを使用していない場合

cursor.execute("select value from table order by value desc limit 1")
2
user3467349

select count(*) from ... groupy by ...は_0_の代わりにNoneを返すため、fetchone()[0]は例外になります。

だから

_def get_scalar_from_sql(sqlcur, sqlcmd):
    # select count(*) from .... groupy by ... returns None instead of 0
    sqlcur.execute(sqlcmd)
    scalar = 0
    Tuple_or_None = sqlcur.fetchone()
    if not Tuple_or_None is None:
        (scalar,) = Tuple_or_None
    return scalar
_
0
Markus