gpt4 book ai didi

python - 从 Python 的 sqlite3 获取字段值列表,而不是表示行的元组

转载 作者:IT老高 更新时间:2023-10-28 21:36:43 26 4
gpt4 key购买 nike

Python 的 sqlite3 很烦人模块总是返回一个元组列表!当我查询单个列时,我希望得到一个简单的列表。

例如当我执行时

SELECT somecol FROM sometable

然后打电话

cursor.fetchall()

返回

[(u'one',), (u'two',), (u'three',)]

但我宁愿得到

[u'one', u'two', u'three']

有没有办法做到这一点?

最佳答案

sqlite3.Connection 有一个 row_factory属性。

文档指出:

You can change this attribute to a callable that accepts the cursor and the original row as a tuple and will return the real result row. This way, you can implement more advanced ways of returning results, such as returning an object that can also access columns by name.

要从 SELECT 中返回单个值的列表,例如 id,您可以将 lambda 分配给 row_factory,它返回每行中的第一个索引值;例如:

import sqlite3 as db

conn = db.connect('my.db')
conn.row_factory = lambda cursor, row: row[0]
c = conn.cursor()
ids = c.execute('SELECT id FROM users').fetchall()

这会产生类似:

[1, 2, 3, 4, 5, 6] # etc.

您也可以直接在光标对象本身上设置 row_factory。实际上,如果您在创建游标之前 没有在连接上设置row_factory,则必须设置row_factory 在光标上:

c = conn.cursor()
c.row_factory = lambda cursor, row: {'foo': row[0]}

您可以在游标对象的生命周期中的任何时候重新定义 row_factory,并且可以取消设置 None 的行工厂以返回默认的基于元组的结果:

c.row_factory = None
c.execute('SELECT id FROM users').fetchall() # [(1,), (2,), (3,)] etc.

关于python - 从 Python 的 sqlite3 获取字段值列表,而不是表示行的元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2854011/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com