Как выводить все элементы из Бд?
У меня в бд есть колонка TEXT, в которой хранится словарь. Вопрос такой - как вытащить оттуда все элементы?
cur.execute("""CREATE TABLE IF NOT EXISTS info (
id INT,
cards TEXT,
wins INT,
defeat INT,
duel TEXT
)""")
con.commit()
...
cur.execute(f"""INSERT INTO info (id, cards, wins, defeat, duel) VALUES ({member.id}, '[]', 0, 0, Null)""")
...
test = cur.execute(f"""SELECT cards FROM info WHERE id = {ctx.author.id}""").fetchone()[0]
print(test) #["", "", ""]
Ответы (2 шт):
Автор решения: Dmitry Nekrasov
→ Ссылка
Вам следует сначала выполнить запрос
test = cur.execute(f"""SELECT cards FROM info WHERE id = {ctx.author.id}""")
затем уже работать с данными
print(test.fetchone()[0])
В качестве примера:
cur.execute(f"""INSERT INTO info (id, cards, wins, defeat, duel) \
VALUES (1, '["test1", "Тест"]', 0, 0, Null)""")
test = cur.execute(f"""SELECT cards FROM info WHERE id = 1""")
print(test.fetchone()[0])
["test1", "Тест"]
Данные, полученные с помощью fetchone()[0], будут иметь тип данных str, поэтому для удобства работы с ними их можно привести к соответствующему виду с помощью библиотеки ast
print(type(test.fetchone()[0]))
>> <class 'str'>
data = ast.literal_eval(test.fetchone()[0]))
print(type(data), data)
>> <class 'list'> ['test1', 'Тест']
Теперь с данными можно работать как с обычным списком.
Автор решения: q r t s
→ Ссылка
Это довольно просто.
for test in cursor.execute(f"SELECT ... FROM ... WHERE id = {ctx.author.id}"):
- Вместо "test" можно вписать что угодно.
- SELECT ... - получаем необходимые категории из таблицы.
- FROM ... - название таблицы.
Предположим мы хотим вывести имя и айди пользователя.
for test in cursor.execute(f"SELECT name, id FROM users WHERE id = {ctx.author.id}"):
Далее по нумерации вытаскиваем из таблицы значения. Нумерация в таблице начинается с 0. И так:
print(f"Получено сообщение от пользователя {test[0]}. ID: {test[1]}")