comment obtenir un seul résultat à partir d'une requête SQLite en python?
Existe-t-il un moyen élégant d'obtenir un seul résultat à partir D'une requête SQLite SELECT lors de l'utilisation de python 2.7?
Par exemple:
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
Existe-t-il un moyen d'éviter les for
imbriqués et d'obtenir directement la valeur? J'ai essayé
maxVal = cursor[0][0]
Sans succès.
5 réponses
Je pense que vous cherchez curseur.fetchone() :
cursor.fetchone()[0]
Ou vous pouvez écrire une fonction wrapper qui, étant donné SQL, renvoie un résultat scalaire:
def get_scalar_result(conn, sql):
cursor=conn.cursor()
cursor.execute(sql)
return cursor.fetchone()[0]
Je m'excuse pour le Python peut-être moins que syntaxiquement correct ci-dessus, mais j'espère que vous avez l'idée.
Si vous n'utilisez pas pysqlite qui a le cursor.fetchone
cursor.execute("select value from table order by value desc limit 1")
select count(*) from ... groupy by ...
retourne None
au lieu de 0
,
donc fetchone()[0]
conduirait à une exception.
Donc
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
Ou vous pouvez essayer :
cursor.execute("SELECT * FROM table where name='martin'")