it-swarm.com.de

wie bekomme ich ein einzelnes Ergebnis aus einer SQLite-Abfrage in Python?

Gibt es eine elegante Möglichkeit, mit Python 2.7 ein einzelnes Ergebnis aus einer SQLite SELECT-Abfrage zu erhalten?

zum Beispiel:

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

gibt es eine Möglichkeit, diese verschachtelten fors zu vermeiden und den Wert direkt abzurufen? ich habe es versucht

maxVal = cursor[0][0]

ohne erfolg.

28
iliaden

ich denke, Sie suchen Cursor.fetchone () :

cursor.fetchone()[0]
55
mouad

Oder Sie schreiben eine Wrapper-Funktion, die bei SQL ein skalares Ergebnis zurückgibt:

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

    return cursor.fetchone()[0]

Ich entschuldige mich für den möglicherweise weniger als syntaktisch korrekten Python oben, aber ich hoffe, Sie bekommen die Idee.

4
J. Polfer

Wenn Sie nicht pysqlite verwenden, das cursor.fetchone eingebaut hat

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

select count(*) from ... groupy by ... gibt None anstelle von 0 zurück __. fetchone()[0] würde zu einer Ausnahme führen.

Deshalb

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