如何从python中的SQLite查询中获取单个结果?

ili*_*den 29 python sql sqlite

在使用python 2.7时,是否有一种优雅的方法可以从SQLite SELECT查询中获取单个结果?

例如:

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
Run Code Online (Sandbox Code Playgroud)

有没有办法避免那些嵌套的fors并直接获取值?我试过了

maxVal = cursor[0][0]
Run Code Online (Sandbox Code Playgroud)

没有任何成功.

mou*_*uad 59

我想你正在寻找Cursor.fetchone():

cursor.fetchone()[0]
Run Code Online (Sandbox Code Playgroud)


J. *_*fer 7

或者,您可以编写一个包装函数,在给定 SQL 的情况下返回标量结果:

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

    return cursor.fetchone()[0]
Run Code Online (Sandbox Code Playgroud)

我为上面可能在语法上不正确的 Python 道歉,但我希望你能理解。


Саш*_*кин 7

小心,接受的答案可能会导致TypeError

由于fetchone()文档:

获取查询结果集的下一行,返回单个序列,或者当没有更多数据可用时返回 None。

因此,某些 SQL 查询cursor.fetchone()[0]可能会导致None[0]引发TypeError异常。

获得第一行的更好方法None是:

first_row = next(cursor, [None])[0]

如果 SQL 查询为空,next将使用默认值[None]并从该列表中获取第一个元素,而不会引发异常。