如何在SQLalchemy中按日期和时间检索数据库条目?

问题描述 投票:0回答:1

为了限制用户尝试使用错误的凭据登录的次数,我正在尝试从数据库中检索今天输入的条目(最好是在最后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()

我希望得到一个包含与今天日期匹配的数据库条目的列表,但我现在得到的是一个空列表。

python sqlalchemy
1个回答
0
投票

我找到了解决我特定问题的方法。它并不像我希望的那样最佳,但它适用于我想要实现的目标。我在这里张贴它以防其他人在遇到类似的问题

我没有尝试检索与我的搜索匹配的所有条目并将它们放入列表中,而是使用第一个条目。这确实意味着我无法检查时间设置中的尝试次数,所以我在我的数据库中引入了一个额外的变量,我称之为“数字”,我可以跟踪并计算,因为list与其他变量一起使用。

然后我使用用户再次调用该函数的时间并创建一个名为sum的var,它是当前日期时间 - 来自数据库的日期时间。最后我使用timedelta检查时间是否超过5分钟现在,我可以检查时间是否已经过去并重置数据库中的'number'变量,以便用户的登录失败重置成功登录。

当然,我们确实希望能够看到用户的登录是否在仅仅保护暴力攻击之外是成功的,所以我的数据库中有另一个名为“success”的变量,它是一个不重置的布尔值用户已成功登录。

我希望有人发现这个解决方案很有帮助,因为我正在努力解决这个问题,并且无法从StackOverflow上现有的问题和评论中找到合适的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.