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 for
s zu vermeiden und den Wert direkt abzurufen? ich habe es versucht
maxVal = cursor[0][0]
ohne erfolg.
ich denke, Sie suchen Cursor.fetchone () :
cursor.fetchone()[0]
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.
Wenn Sie nicht pysqlite verwenden, das cursor.fetchone
eingebaut hat
cursor.execute("select value from table order by value desc limit 1")
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