如何从 python 中的 SQL 查询中获取单个结果?
- 2025-02-25 09:09:00
- admin 原创
- 24
问题描述:
使用 Python 时,是否有一种优雅的方法可以从 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
有没有办法避免嵌套for
并直接获取值?我试过了
maxVal = cursor[0][0]
但没有任何成功。
解决方案 1:
我认为您正在寻找Cursor.fetchone():
cursor.fetchone()[0]
解决方案 2:
小心,接受的答案可能会导致TypeError
!
由于fetchone()
文档:
获取查询结果集的下一行,返回单个序列,当没有更多可用数据时返回 None。
因此某些 SQL 查询cursor.fetchone()[0]
可能会变成None[0]
导致引发TypeError
异常的情况。
获得第一行的更好方法None
是:
first_row = next(cursor, [None])[0]
如果 SQL 查询为空,next
将使用默认值[None]
并从该列表中获取第一个元素而不引发异常。
解决方案 3:
或者你可以编写一个包装函数,根据 SQL 返回标量结果:
def get_scalar_result(conn, sql):
cursor=conn.cursor()
cursor.execute(sql)
return cursor.fetchone()[0]
对于上面的 Python 语法可能不太正确,我深感抱歉,但我希望你能明白我的意思。
解决方案 4:
如果你没有使用内置的 pysqlitecursor.fetchone
cursor.execute("select value from table order by value desc limit 1")
解决方案 5:
序列解包可用于从结果元组中提取标量值。
通过迭代游标(或cursor.fetchall
)如果有多行:
for result, in cursor:
print(result)
cursor.fetchone
或者,如果结果集中只有一行,则使用:
result, = cur.fetchone()
print(result)
在这两种情况下,后面的逗号都会result
将元素从单元素元组中解包出来。这与更常见的
a, b = (1, 2)
除了元组只有一个元素:
a, = (1,)
解决方案 6:
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
解决方案 7:
或者你可以尝试:cursor.execute("SELECT * FROM table where name='martin'")
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
热门标签
云禅道AD