Python SQLite Вывод данных
Есть метод channels который должен возвращать все записи из БД
import sqlite3
class Database:
def __init__(self, database):
"""Подключаемся к БД и сохраняем курсор соединения"""
self.connection = sqlite3.connect(database)
self.cursor = self.connection.cursor()
def channels(self):
with self.connection:
for value in self.cursor.execute("SELECT * FROM `channels`").fetchall():
return f"ID: {value[0]}\nTitle: {value[1]}\nURL: {value[2]}"
Но он возвращает лишь первое поле. Как мне вернуть все поля из таблицы channels
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
Варианты:
Заполните в списке:
def channels(self): items = [] for value in self.cursor.execute("SELECT * FROM `channels`").fetchall(): items.append(f"ID: {value[0]}\nTitle: {value[1]}\nURL: {value[2]}") return itemsВ одну строку:
def channels(self): return [ f"ID: {value[0]}\nTitle: {value[1]}\nURL: {value[2]}" for value in self.cursor.execute("SELECT * FROM `channels`").fetchall() ]Верните как генератор:
def channels(self): for value in self.cursor.execute("SELECT * FROM `channels`").fetchall(): yield f"ID: {value[0]}\nTitle: {value[1]}\nURL: {value[2]}"В одну строку:
def channels(self): yield from ( f"ID: {value[0]}\nTitle: {value[1]}\nURL: {value[2]}" for value in self.cursor.execute("SELECT * FROM `channels`").fetchall() )
Убрал with, т.к. там нет запросов, меняющих таблицы в базе данных
Кст, в текущей конструкции имеет смысл value указать возвращаемые значения, для повышения читаемости кода:
for id_, title, url in self.cursor.execute("SELECT * FROM `channels`").fetchall():
f"ID: {id_}\nTitle: {title}\nURL: {url}"
Это если у вас в таблице channels 3 поля, если больше, тогда укажите их явно в выборке: SELECT id, title, url FROM channels, либо при распаковке использовать *args:
for id_, title, url, *_ in self.cursor.execute("SELECT * FROM `channels`").fetchall():