Как повторно инициализировать счетчик индекса строки в наборе результатов запроса SELECT в sqlite3? - PullRequest
1 голос
/ 15 мая 2019

Я выполняю запрос SELECT. Я получаю набор результатов. Проблема в том, что если я повторяю один раз, я не могу повторить снова. Я думаю, что счетчик должен быть повторно инициализирован. Но я не могу этого сделать.

В моем коде первый FOR LOOP работает, а второй нет. Пожалуйста, помогите.

Я искал в стеке поток для этого, но я не мог найти ответ

код

class ItemList (Resource):

 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}] для предметов Array

1 Ответ

1 голос
/ 15 мая 2019

Если вы «рассматриваете курсор как итератор», как это делается здесь rows = cursor.execute(select_query), он делает fetch ing «под капотом».

Из документа sqlite3 API [выделение добавлено]:

Чтобы получить данные после выполнения оператора SELECT, вы можете либо рассматривать курсор как итератор, [или] вызовите метод fetchone () курсора, чтобы получить одну подходящую строку, или вызовите fetchall (), чтобы получить список совпадающих строк.

Если вы измените rows = cursor.execute(select_query) наrows = cursor.execute(select_query).fetchall(), rows будет массивом, содержащим результаты, и вы можете повторять его столько раз, сколько необходимо.

...