Как вывести базу данных в телеграм(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