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 forimbriqués et d'obtenir directement la valeur? J'ai essayé

maxVal = cursor[0][0]

Sans succès.

28
demandé sur iliaden 2011-08-10 17:09:07

5 réponses

Je pense que vous cherchez curseur.fetchone() :

cursor.fetchone()[0]
55
répondu mouad 2011-08-10 13:11:58

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.

4
répondu J. Polfer 2018-07-24 06:03:16

Si vous n'utilisez pas pysqlite qui a le cursor.fetchone

cursor.execute("select value from table order by value desc limit 1")
1
répondu user3467349 2014-12-05 23:46:23

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
0
répondu Markus 2018-09-26 20:39:33

Ou vous pouvez essayer : cursor.execute("SELECT * FROM table where name='martin'")

-3
répondu WinuX 2011-08-10 13:22:05