Подсчитать общее количество вхождений за текущий день в склянке-sqlalchemy

Я создал чат-бот WhatsApp, который принимает ключевые слова и возвращает результат в зависимости от отправленного ключевого слова. Затем данные отправляются в базу данных. Я хотел бы посчитать, сколько раз идентификатор пользователя, отправляющего ключевое слово, появляется в моей базе данных сегодня. Идентификатор пользователя в этом контексте - номер человека.

Я начал с того, что просто пытался посчитать, сколько раз появляется число, но не могу понять эту первую часть правильно

Вот пример моего кода

class Users(db.Model):
    __tablename__ = 'users'
    cell_number = db.Column(db.Integer, primary_key = True)
    interaction_date = db.Column(db.DateTime, default = datetime.now(pytz.timezone('Africa/Harare')))
    request_key = db.Column(db.String(64000))
    counter = db.Column(db.Integer)
...
    total = user_object.query.filter_by(user_object.cell_number).filter_by(user_object.interaction_date == func.current_date()).count()

Это возвращает сообщение об ошибке:

TypeError: filter_by() takes 1 positional argument but 2 were given

ОБНОВИТЬ

После прочтения отправленного комментария я внес в свой код несколько изменений, которые немного изменили проблему, поэтому теперь я возвращаю счетчик для идентификаторов пользователей, однако я не могу фильтровать взаимодействия, которые произошли сегодня.

Вот мой модифицированный код:

interaction_date = Users.interaction_date
        current = datetime.now(pytz.timezone('Africa/Harare')).strftime('%d-%m-%y')
        total = Users.query.filter(user_object.cell_number == cleaned_number).filter(interaction_date == current).count()

Это, однако, возвращает счетчик 0, несмотря на то, что по крайней мере 17 взаимодействий с числом, которое я использую. Вот образец моей базы данных

cell_number  interaction_date      request_key 
123          2020-03-25 13:51:44    xv
123          2020-03-25 13:51:50    cv
121          2020-03-24 22:22:30    dfdf

Важно добавить, что Interaction_date возвращает значение None. Я не уверен, почему я не извлекаю значение Interaction_date из своей базы данных.

Всего 1 ответ


Вы сравниваете объект datetime со строкой в ​​фильтре ниже, потому что вы используете метод strftime для преобразования объекта datetime в строку в методе datetime.now ().

current = datetime.now(pytz.timezone('Africa/Harare')).strftime('%d-%m-%y')
total = Users.query.filter(user_object.cell_number == cleaned_number).filter(interaction_date == current).count()

Поэтому удалите вызов метода strftime и сравните дни из объекта datetime.

current = datetime.now(pytz.timezone('Africa/Harare'))
total = Users.query.filter(user_object.cell_number == cleaned_number).filter(interaction_date.day == current.day).count()

Есть идеи?

10000