Выбор всех id пользователей БД sqlite3 в telebot

System

Новичок
Пользователь
Мар 11, 2022
14
0
1
Написал код:

Python:
def selectuser(self, chat_id):
        with self.connection:
            return self.cursor.execute("SELECT `chat_id` FROM `userchat` WHERE `chat_id` = ?", (chat_id)).fetchall()
А также для просмотра написал:

Python:
results = db.selectuser(message.from_user.id)
print(results)

Выводит только id того человека, который написал, как сделать вывод всех id в таблице БД?
 

Selez

Новичок
Пользователь
Мар 11, 2022
11
3
3
Ты забыл вывести все результаты функцией .fetchall() (код сработает если таблице userchat есть столбец chat_id)
Python:
def selectuser(self, chat_id):
    with self.connection:
        return self.cursor.execute("SELECT `chat_id` FROM `userchat` ").fetchall()
 

Selez

Новичок
Пользователь
Мар 11, 2022
11
3
3
Тебе бы SQL подучить, ниже SQL команда для получения всех ID из таблицы userchat
Python:
SELECT `chat_id` FROM `userchat`
 

System

Новичок
Пользователь
Мар 11, 2022
14
0
1
Тебе бы SQL подучить, ниже SQL команда для получения всех ID из таблицы userchat
Python:
SELECT `chat_id` FROM `userchat`
Так хоть был вывод одного пользователя, а теперь ошибка или:
Python:
2022-03-13 12:55:03,721 (__init__.py:688 MainThread) ERROR - TeleBot: "A request to the Telegram API was unsuccessful. Error code: 400. Description: Bad Request: chat not found"
или...
Python:
<sqlite3.Cursor object at 0x00000174C8983EC0>
 

Selez

Новичок
Пользователь
Мар 11, 2022
11
3
3
Так хоть был вывод одного пользователя, а теперь ошибка или:
Python:
2022-03-13 12:55:03,721 (__init__.py:688 MainThread) ERROR - TeleBot: "A request to the Telegram API was unsuccessful. Error code: 400. Description: Bad Request: chat not found"
или...
Python:
<sqlite3.Cursor object at 0x00000174C8983EC0>
покажи полный фрагмент кода
 

System

Новичок
Пользователь
Мар 11, 2022
14
0
1
покажи полный фрагмент кода
Изначально было так: *тык*

А так, порезал код.
Основная часть:
Python:
import telebot
import config
import datetime

from testingdatabase import Database
from telebot import types

bot = telebot.TeleBot(config.TOKEN)

db = Database('database.db')

@bot.message_handler(commands = ['start'])
def start(message):
    #Введення початкової кнопки
    markup = types.ReplyKeyboardMarkup(resize_keyboard = True)
    item1 = types.KeyboardButton('🫂Почати анонімне спілкування🫂')
    markup.add(item1)
    #Введення стікера
    sticker = open('sticker/welcome.webp','rb')
    bot.send_sticker(message.chat.id, sticker)
    #Привітання
    bot.send_message(message.chat.id, "Ласкаво просимо,{0.first_name}.\nЯ - <b>{1.first_name}</b>.".format(message.from_user, bot.get_me()), reply_markup = markup,
        parse_mode='html')

@bot.message_handler(commands = ['add'])
def userchatadd(message):
    if message.chat.type == 'private':
        if not db.user_exists(message.from_user.id,message.from_user.username,):
            db.add_user(message.from_user.id,message.from_user.username,)
            bot.send_message(message.chat.id, 'Ви були добавлені в базу даних.')
        elif db.user_exists(message.from_user.id,message.from_user.username,):
            bot.send_message(message.chat.id, 'Ви вже є в базі даних.')
        else:
            bot.send_message(message.chat.id, 'Помилка бази даних.')

@bot.message_handler(commands = ['remove'])
def userchatadd(message):
    if message.chat.type == 'private':
        if db.user_exists(message.from_user.id,message.from_user.username,):
            db.remove_user(message.from_user.id,message.from_user.username,)
            bot.send_message(message.chat.id, 'Ви були видалені із бази даних.')
        elif not db.user_exists(message.from_user.id,message.from_user.username,):
            bot.send_message(message.chat.id, 'Вас не було в базі даних.')
        else:
            bot.send_message(message.chat.id, 'Помилка бази даних.')

@bot.message_handler(content_types=["text"])
def speakingusers(message):
    print(datetime.datetime.today().strftime("%d %B %Y %T"))
    #print('@' + message.from_user.username + '│' + message.from_user.first_name + '-' + message.text, end = "\n")
    print(message)
    bot.send_message(message.from_user.id, "Повідомлення відправлено!")

    results = db.selectuser(message.from_user.id)
    print(results)
    #for result in results:
        #if result != message.from_user.id:
            #bot.send_message(result, message.text)
        #userchat = db.selectuser(message.from_user.id)
        #bot.send_message(userchat, message.text)
bot.polling(none_stop = True)

Сама же БД:

Python:
import sqlite3

class Database:
    def __init__(self, database_file):
        self.connection = sqlite3.connect(database_file, check_same_thread = False)
        self.cursor = self.connection.cursor()

    def add_user(self, chat_id, username):
        with self.connection:
            return self.cursor.execute("INSERT INTO `userchat` (`chat_id`, `username`) VALUES (?,?)", (chat_id, username,))

    def selectuser(self, chat_id):
        with self.connection:
            return self.cursor.execute("SELECT `chat_id` FROM `userchat` ")
            #return self.cursor.execute("SELECT * FROM `userchat` WHERE `chat_id` = ?", (chat_id,)).fetchall()
    
    def remove_user(self, chat_id, username):
        with self.connection:
            return self.cursor.execute("DELETE FROM `userchat` WHERE `chat_id` = ? AND `username` = ?",(chat_id,username,)).fetchmany(1)

    def user_exists(self, chat_id, username):
        with self.connection:
            result = self.cursor.execute("SELECT * FROM `userchat` WHERE `chat_id` = ? AND `username` = ?",(chat_id,username,)).fetchmany(1)
            return bool(len(result))
Делал на основе временного сохранение id пользователей:

Python:
import telebot
import config

from database import Database
from telebot import types

#db = Database('db.db')

bot = telebot.TeleBot(--Не кидал код бота в конфиг--)

users = set()

@bot.message_handler(commands = ['start'])
def start(message):
    #Введення початкової кнопки
    markup = types.ReplyKeyboardMarkup(resize_keyboard = True)
    item1 = types.KeyboardButton('🫂Почати анонімне спілкування🫂')
    markup.add(item1)
    #Введення стікера
    sticker = open('sticker/welcome.webp','rb')
    bot.send_sticker(message.chat.id, sticker)
    #Привітання
    bot.send_message(message.chat.id, "Ласкаво просимо,{0.first_name}.\nЯ - <b>{1.first_name}</b>.".format(message.from_user, bot.get_me()), reply_markup = markup,
        parse_mode='html')

@bot.message_handler(func=lambda message: not message.from_user.is_bot)
def on_message(message):
    if message.text != 'start':
        users.add(message.from_user.id)
        print(message.from_user.first_name + " написав(-а): " + message.text, end = "\n")
        print(message)
        bot.send_message(message.from_user.id, "Повідомлення відправлено!")
        for user in users:
            if user != message.from_user.id:
                bot.send_message(user, message.text)

bot.polling(none_stop = True)
 

System

Новичок
Пользователь
Мар 11, 2022
14
0
1
Ты забыл вывести все результаты функцией .fetchall() (код сработает если таблице userchat есть столбец chat_id)
Python:
def selectuser(self, chat_id):
    with self.connection:
        return self.cursor.execute("SELECT `chat_id` FROM `userchat` ").fetchall()
Cпасибо, помогло
 

Форум IT Специалистов