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

问题描述 投票:28回答:5

在使用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

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

maxVal = cursor[0][0]

没有任何成功。

python sql sqlite
5个回答
56
投票

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

cursor.fetchone()[0]

4
投票

或者你可以编写一个包装器函数,给定SQL,返回一个标量结果:

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

    return cursor.fetchone()[0]

我为上面可能不太符合语法的Python道歉,但我希望你明白这个想法。


2
投票

如果你没有使用内置cursor.fetchone的pysqlite

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

0
投票

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

-3
投票

或者你可以尝试:cursor.execute("SELECT * FROM table where name='martin'")

© www.soinside.com 2019 - 2024. All rights reserved.