Подсчитать общее количество вхождений за текущий день в flask -sqlalchemy - PullRequest
0 голосов
/ 25 марта 2020

Я создал чат-бот 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 Ответ

0 голосов
/ 25 марта 2020

Вы сравниваете объект 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()
...