@newbie63

Как боту aiogram вывести число из бд sqlite?

В бд у каждого пользователя есть свое число. Я написал код на aiogram, но бот выдает одно и то же число(у каждого пользователя свое число). Как сделать так чтобы бот сопостовлял айди пользователя и айди из бд и отправлял число именно данного пользователя
from aiogram import Bot, types
from aiogram.types import ChatActions
import asyncio
import logging
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor
from config import TOKEN
import sqlite3

class SQLither:

    def __init__(self, database) -> object:
        self.conn = sqlite3.connect(database)
        self.c = self.conn.cursor()

    def exists_user(self, user_id):
        return bool(self.c.execute("SELECT * FROM users WHERE user_id=?", (user_id,)).fetchone())

    def add_to_db(self, user_id, first_name, last_name, username):
        self.c.execute("INSERT INTO users(user_id, first_name, last_name, username) VALUES(?,?,?,?,?)", (user_id, first_name, last_name, username, number))
        self.conn.commit()

bot = Bot(token=TOKEN)
dp = Dispatcher(bot)
db = SQLither("db.db")


@dp.message_handler(commands=['start'])
async def process_hi1_command(message: types.Message):
    user_id = message.from_user.id
    first_name = message.from_user.first_name
    last_name = message.from_user.last_name
    username = message.from_user.username
    if not db.exists_user(user_id):
        db.add_to_db(user_id, first_name, last_name, username)
    await message.answer('Добро пожаловать!')


@dp.message_handler(commands=['number'])
async def number(message: types.Message):
    conn = sqlite3.connect('db.db')
    cur = conn.cursor()
    cur.execute(f"SELECT * FROM users WHERE user_id")
    result = cur.fetchall()
    user_id = message.from_user.id
    await bot.send_message(message.from_user.id, f'Ваше число: = {[list(result[0])[5]][0]}')


if __name__ == "__main__":
    executor.start_polling(dp, skip_updates=True)
  • Вопрос задан
  • 147 просмотров
Решения вопроса 1
@o5a
В функции exists_user как раз правильно составлен запрос на выбор конкретного пользователя (с использованием WHERE).
Аналогично должен быть составлен и запрос в функции number. В текущем виде тот запрос выбирает всех подряд.
Для передачи самого номера пользователя в команду нужно достать его из параметров:
async def number(message: types.Message):
    num = message.get_args()
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@UberPool
О каком числе идет речь?
Вы записываете telegram_id,если вам нужно записать что-то другое просто добавьте запись.
По примеру вашей архитектуры:
user_id, first_name, last_name, username, <ваше число>
.
И тогда просто выводите это число пользователю,сопоставив telegram_id в базе данных.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы