Как переместить значения из таблицы sqlite в список python (flask)

Я хочу извлечь данные из таблицы sqlite в список и передать этот самый список в html-шаблон. Я попробовал это сделать так:

query = "SELECT * from columnes where name_music='{name}'".format(name=name)
query1 = "SELECT * from article where name_music='{name}'".format(name=name)
articule = cursor.execute(query1)
articule = articule.fetchall()
d = cursor.execute(query)
d = d.fetchall()
print(articule[0][0])
return render_template('composition.html', comp=d, comp1=articule)

Однако,когда я пытаюсь вывести элемент с помощью print у меня выводится ошибка:

введите сюда описание изображения

Возможно,кто-нибудь знает - как это исправить? Или кто-нибудь знает другие способы извлечь данные из базы данных? Заранее спасибо! P.S. Так же хотелось бы сказать,что в таблице article лежит один элемент(она не пустая).

P.S.S если выводить articule[0] получается очень интересно: введите сюда описание изображения То есть сначала он выводит всё,но потом ругается на этот же вывод


Ответы (3 шт):

Автор решения: Andrew

Вот так должно быть:

query1 = "SELECT * from article where name_music='{name}'".format(name=name)
cursor.execute(query1)
data = cursor.fetchall()
print(data[0][0])
→ Ссылка
Автор решения: gil9red

Тут не нужно вручную формировать строку запроса, используйте биндинги (binding). Это обезопасит от sql-инъекций и оставит заботу о экранировании строки на драйвер

  • Например, у вас запрос формируется вручную SELECT * from columnes where name_music='{name}', а кто-то передает в name такую строку ' or 1=1 or ''=' и у вас получится запрос, который вернет все записи таблицы (это sql-инъекция):
    SELECT * from columnes where name_music='' or 1=1 or ''=''
    

Пример:

articule = cursor.execute("SELECT * from article where name_music=?", [name]).fetchall()
columnes = cursor.execute("SELECT * from columnes where name_music=?", [name]).fetchall()
print(len(articule), articule)
print(len(columnes), columnes)

return render_template('composition.html', comp=columnes, comp1=articule)

PS.

Вторым параметром в execute передается коллекция, обычно это кортеж, но на один элемент он путающим (name,), поэтому использовал список [name]

→ Ссылка
Автор решения: Namerek
import sqlite3 as sql
conn = sql.connect('mydb.sqlite')
cur = conn.cursor()
name = 'music'

cur.execute(
    "select * from arcticle where name_music = ?;", [name]
)
article = [*cur.fetchall()]  # or list(cur.fetchall())
# Ну и так далее

→ Ссылка