我在任何地方都找不到相关的东西。 我想在我用python保存在mysql上的"密码"上超时。
cur.execute("INSERT INTO generatedcode(password, codetimeout) VALUES (%s,
%s)", [passwordd, timestamp])
由于我对 python 不够熟悉,因此我将把代码的细节留给你;我将只介绍解决方案的想法和相关 SQL 命令(语法需要验证,因为我没有环境来测试它(。
假设您要将超时设置为从保存密码的那一刻起的 1 小时,并且您的表(至少(具有以下两个字段:Password
和Expiration
(我假设密码是二进制类型以允许加密,过期将是 DATETIME 类型(。
然后,您将实现以下 SQL 命令:
INSERT INTO <your table> (Password , Expiration )
VALUES (%s , DATEADD(NOW(),3600))
[为清楚起见而添加空格]
并将该字符串发送到数据库,其中%s
将被密码值替换。
DATEADD(NOW(),3600)
所做的是:
- 获取当前日期和时间,
- 增加一个小时。
将其插入到表中后,稍后将使用以下命令检索密码:
SELECT Password
FROM <your table>
WHERE User = <could be Username or any other key that you are using now>
AND Expiration > NOW()
这意味着,获取其到期日期时间仍在未来的密码(如果有(。
希望这就是你要找的。
干杯!!
编辑:
我在修复后在下面添加您的代码:
@app.route('/signattendance', methods=['GET'])
def signattendance():
stamp = "signed"
error = None
# now = datetime.datetime.today()
# tdelta = datetime.timedelta(seconds=10000)
now = datetime.datetime.now()
if request.method == 'GET':
cur1 = mysql.connection.cursor()
result = cur1.execute("SELECT password FROM generatedcode WHERE codetimeout > NOW()")
if result is False:
cur = mysql.connection.cursor()
cur.execute("INSERT INTO attendance(studentattendance) VALUES(%s,DATEADD(NOW(),3600)", [stamp])
mysql.connection.commit()
cur.close()
# cur1.close()
flash('Succsefully signed', 'Acepted')
else:
flash('You couldnt sign attendance', 'Denied')
else:
return redirect(url_for('dashboard'))
return render_template('signattendance.html', error=error)
请注意,我离开数据库检查当前时间。
if request.method == 'GET' or 'POST':
cur1 = mysql.connection.cursor()
result = cur1.execute("SELECT password FROM generatedcode "
"WHERE DATE_SUB(CURRENT_TIME (),INTERVAL 10 MINUTE) <= codetimeout;")