Задать вопрос
@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)
  • Вопрос задан
  • 2393 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
@o5a
В функции exists_user как раз правильно составлен запрос на выбор конкретного пользователя (с использованием WHERE).
Аналогично должен быть составлен и запрос в функции number. В текущем виде тот запрос выбирает всех подряд.
Для передачи самого номера пользователя в команду нужно достать его из параметров:
async def number(message: types.Message):
    num = message.get_args()
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@UberPool
Python/JS coder
О каком числе идет речь?
Вы записываете telegram_id,если вам нужно записать что-то другое просто добавьте запись.
По примеру вашей архитектуры:
user_id, first_name, last_name, username, <ваше число>
.
И тогда просто выводите это число пользователю,сопоставив telegram_id в базе данных.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
от 200 000 до 300 000 ₽
Greenway Global Новосибирск
от 150 000 ₽
Akronix Санкт-Петербург
от 150 000 до 200 000 ₽
30 янв. 2025, в 18:39
200000 руб./за проект
30 янв. 2025, в 18:21
2500 руб./за проект
30 янв. 2025, в 18:18
3000 руб./за проект