Как переместить значения из таблицы 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 шт):
Вот так должно быть:
query1 = "SELECT * from article where name_music='{name}'".format(name=name)
cursor.execute(query1)
data = cursor.fetchall()
print(data[0][0])
Тут не нужно вручную формировать строку запроса, используйте биндинги (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]
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())
# Ну и так далее
