Ответ 1
Я думаю, что вы ищете Cursor.fetchone():
cursor.fetchone()[0]
Есть ли элегантный способ получить единственный результат из 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]
без каких-либо успехов.
Я думаю, что вы ищете Cursor.fetchone():
cursor.fetchone()[0]
Или вы можете написать функцию-оболочку, которая, учитывая SQL, возвращает скалярный результат:
def get_scalar_result(conn, sql):
cursor=conn.cursor()
cursor.execute(sql)
return cursor.fetchone()[0]
Я извиняюсь за возможно менее синтаксически правильный Python выше, но я надеюсь, что вы поняли идею.
Если вы не используете pysqlite, у которого есть встроенный cursor.fetchone
cursor.execute("select value from table order by value desc limit 1")
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
или вы можете попробовать:
cursor.execute("SELECT * FROM table where name='martin'")