Как получить записи базы данных по дате и времени в SQLalchemy? - PullRequest
0 голосов
/ 03 апреля 2019

Чтобы ограничить количество попыток входа пользователя в систему с неверными учетными данными, я пытаюсь извлечь записи из базы данных, которые были введены сегодня (желательно даже в течение последних 10 минут), и проверить, успешно ли выполнено Это правда или ложь.

Однако я не могу получить записи по дате. Я печатаю список с тем, что должно быть там, и теперь это должен быть длинный список, и он продолжает возвращаться пустым. Как мне их получить?

После неудачной проверки всех записей datetime, введенных за последние десять минут, я просто вернулся к проверке записей на сегодня, чтобы посмотреть, смогу ли я получить какие-либо результаты.

Я пытался использовать «обычный» метод filter_by и метод извлечения, и оба возвращаются полностью пустыми (см. Отправленный код). Он не возвращает ошибку или что-либо еще, список просто остается пустым.

login.attempt = datetime.date.today()  # this is the database entry I need to check for.
logins_today = DBLogin.query.filter_by(attempt = datetime.date.today()).all()
logins_today = DBLogin.query.filter(extract('day', DBLogin.attempt) == datetime.date.today()).all()

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

1 Ответ

0 голосов
/ 08 апреля 2019

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

Вместо того, чтобы пытаться получить все записи, соответствующие моему запросу, и поместить их в список, я работаю с первой.Это означает, что я не могу проверить количество попыток за определенное время, поэтому я ввел дополнительную переменную в свою базу данных, которую я назвал «число», которую я могу отслеживать и считать, потому чтоСписок работает с другими переменными.

Затем я использую время, когда пользователь снова вызывает функцию, и создаю переменную с именем sum, которая является текущим datetime - datetime из базы данных.Наконец, я использую timedelta, чтобы проверить, было ли количество времени больше 5 минут. Теперь я могу проверить, прошло ли количество времени, и сбросить переменную 'number' в базе данных, чтобы сбойные логины пользователя сбрасывались науспешный вход в систему.

Конечно, мы хотим видеть, был ли вход пользователя успешным, кроме защиты от переборов, поэтому в моей базе данных есть еще одна переменная «success», которая является логическим значениемЭто не сбрасывается после успешного входа пользователя.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...