Как получить один результат запроса SQLite в Python? - PullRequest
28 голосов
/ 10 августа 2011

Существует ли элегантный способ получения одного результата из запроса SQLite SELECT при использовании python 2.7?

например:

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

есть ли способ избежать этих вложенных for с и получить значение напрямую? Я пробовал

maxVal = cursor[0][0]

безуспешно.

Ответы [ 5 ]

57 голосов
/ 10 августа 2011

Я думаю, что вы ищете Cursor.fetchone () :

cursor.fetchone()[0]
4 голосов
/ 10 августа 2011

Или вы можете написать функцию-обертку, которая, учитывая SQL, возвращает скалярный результат:

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

    return cursor.fetchone()[0]

Я прошу прощения за возможно менее синтаксически правильный Python выше, но я надеюсь, что вы поняли.

2 голосов
/ 06 декабря 2014

Если вы не используете pysqlite со встроенным cursor.fetchone

cursor.execute("select value from table order by value desc limit 1")
0 голосов
/ 26 сентября 2018

select count(*) from ... groupy by ... возвращает None вместо 0, поэтому 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 голосов
/ 10 августа 2011

или вы можете попробовать: cursor.execute("SELECT * FROM table where name='martin'")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...