Как сделать команду, которая будет отображать количество пользователей? Database.countusers() missing 1 required positional argument: 'active'
У меня есть телеграм бот написанный на python, также есть база данных на sqlite3. Выглядит примерно так:
Также есть команда которая по идее должна подсчитывать количество пользователей со значением 1 (countusers). Но она не работает. Когда я пытаюсь выполнить print(message.chat.id, db.countusers()) Пишет ошибку TypeError: Database.countusers() missing 1 required positional argument: 'active'
Если я пишу print(db.countusers(user_id, active)) пишет ошибку NameError: name 'user_id' is not defined
Не могу понять как решить эту проблему. Файл с db командами находится в отдельном файле. файл main не получает от файла db user_id и active?
Вот весь код из файла db:
import sqlite3
class Database:
def __init__(self, db_file):
self.connection = sqlite3.connect(db_file)
self.cursor = self.connection.cursor()
def user_exists(self, user_id):
with self.connection:
result = self.cursor.execute("SELECT * FROM `users` WHERE `user_id` = ?", (user_id,)).fetchmany(1)
return bool(len(result))
def add_user(self, user_id):
with self.connection:
return self.cursor.execute("INSERT INTO `users` (`user_id`) VALUES (?)", (user_id,))
def set_active(self, user_id, active):
with self.connection:
return self.cursor.execute("UPDATE `users` SET `active` = ? WHERE `user_id` = ?", (active, user_id,))
def get_users(self):
with self.connection:
return self.cursor.execute("SELECT `user_id`, `active` FROM `users`").fetchall()
def countusers(self, active):
with self.connection:
return self.cursor.execute("SELECT COUNT (active) from users where active='1'").fetchall()
Ответы (2 шт):
Запрос на подсчёт активных пользователь может выглядеть так:
SELECT COUNT(*) FROM users WHERE active = 1
Если Вам необходимо подсчитать вообще все поля в таблице:
SELECT COUNT(*) FROM users
Возможно Вам будет полезно, в SQLite studio можно открыть редактор и там вводить необходимые запросы, где можно посмотреть их результат. ALT + E
Попробуйте так:
В классе
class Database:
#...
def count_users(self):
return self.connection.cursor().execute("SELECT COUNT(DISTINCT user_id) FROM `users` WHERE `active` = 1").fetchone()[0]
#...
Вне класса
print(f'В базе данных {db.count_users()} активных уникальных пользователей')
