Подтвердить что ты не робот

Как получить единственный результат из SQLite-запроса в python?

Есть ли элегантный способ получить единственный результат из 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]

без каких-либо успехов.

4b9b3361

Ответ 1

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

cursor.fetchone()[0]

Ответ 2

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

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

    return cursor.fetchone()[0]

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

Ответ 3

Если вы не используете pysqlite, у которого есть встроенный cursor.fetchone

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

Ответ 4

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

Ответ 5

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