【问题标题】:how to re-initialize the row index count in result set of a SELECT query in sqlite3?如何在sqlite3中重新初始化SELECT查询结果集中的行索引计数?
【发布时间】:2019-10-01 23:43:20
【问题描述】:

我正在执行一个 SELECT 查询。我得到一个结果集。 问题是如果我迭代一次,我就不能再次迭代。我认为计数器需要重新初始化。但我做不到。

在我的代码中,第一个 FOR LOOP 正在工作,但第二个没有。请帮忙。

我已经在stackoverflow上搜索过这个但我找不到任何答案

代码

类项目列表(资源):

 def get(self):
    connection  = sqlite3.connect("data.db")
    cursor = connection.cursor()
    select_query = "SELECT * FROM items"
    rows = cursor.execute(select_query)
    items=[]
    for row in rows:
        print(row)
    if rows:
        for row in rows:
            items.append({'name':row[0],'price':row[1]})
    connection.commit()
    connection.close()
    return {'items':items},200
    

预期结果是 [{'name': 'chair', 'price': 23.456}, {'name': 'table', 'price': 3333}, {'name': 'van', 'price': 1234}] 对于项目数组

【问题讨论】:

    标签: python mysql database sqlite flask-restful


    【解决方案1】:

    如果您“将光标视为迭代器”,就像这里 rows = cursor.execute(select_query) 所做的那样,它会在“幕后”执行 fetching。

    来自sqlite3 API doc [强调添加]:

    要在执行 SELECT 语句后检索数据,您可以任一 将游标视为迭代器,[or] 调用游标的 fetchone() 方法 要检索单个匹配行,调用 fetchall() 以获取 匹配的行。

    如果您将rows = cursor.execute(select_query) 更改为rows = cursor.execute(select_query).fetchall()rows 将是一个包含结果的数组,您可以根据需要对其进行多次迭代。

    【讨论】:

    • 非常感谢。它奏效了。
    猜你喜欢
    • 2021-11-23
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多