Как вывести базу данных в телеграм(Python)?

БД:

def get_connection():
    global __connection
    if __connection is None:
        __connection = sqlite3.connect('anketa.db')
    return __connection

def init_db(force: bool = False):
    conn = get_connection()
    c = conn.cursor()
    if force:
        c.execute('DROP TABLE IF EXISTS user_message')
    c.execute('''
        CREATE TABLE IF NOT EXISTS user_message (
                id  INTEGER PRIMARY KEY,
                user_id INTEGER NOT NULL,
                text    TEXT NOT NULL,
                date DATETIME  NOT NULL
              )
        ''')
    conn.commit()

def read_table():
    conn = get_connection()
    c = conn.cursor()
    c.execute('SELECT * FROM user_message')
    records = c.fetchall()
    for row in records:
        print("user_id:", row[1])
        print(end="\n")

if __name__ == '__main__':
    init_db()

Main.py:

bot = Bot(token=TOKEN)
dp = Dispatcher(bot)
GROUP_ID = ****

@dp.message_handler()
async def echo_message(message: types.Message):
    message.chat.id == GROUP_ID
    if message.text == 'Вывести юзеров':

if __name__ == '__main__':
    executor.start_polling(dp)

Когда кто-то пишет "Вывести юзеров", бот должен выдавать список юзеров из бд.


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

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

Нужно сделать запрос в базу, обработать результат и подготовить как строку

Не знаю есть ли у вас таблица юзеров, в вопросе была только user_message... Если ее нет, то лучше создайте. А, так чтобы не было дубликатов user_id нужно с SELECT указывать DISTINCT

Например:

@dp.message_handler()
async def echo_message(message: types.Message):
    if message.chat.id == GROUP_ID and message.text == 'Вывести юзеров':
        conn = get_connection()
        c = conn.cursor()
        user_ids = [user_id for user_id, in c.execute('SELECT user_id FROM user_message').fetchall()]
        
        # Тоже самое: ", ".join(map(str, user_ids))
        text = ", ".join(f'{user_id}' for user_id in user_ids)
        
        # TODO: отправляете сообщение с text
→ Ссылка