如何给一个mysql记录一个30分钟后过期的超时?

bis0qfac  于 2021-06-25  发布在  Mysql
关注(0)|答案(2)|浏览(473)

我在任何地方都找不到相关的东西。我想在mysql和python上保存的“password”上设置一个超时。

cur.execute("INSERT INTO generatedcode(password, codetimeout) VALUES (%s, 
%s)", [passwordd, timestamp])
e5nszbig

e5nszbig1#

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;")
zsbz8rwp

zsbz8rwp2#

由于我对python不够熟悉,因此我将把代码的细节留给您;我将只介绍解决方案的想法和相关的sql命令(语法需要验证,因为我没有测试它的环境)。
假设您想设置从保存密码开始的1小时超时,并且您的表(至少)有以下两个字段: Password 以及 Expiration (我假设密码将是二进制类型以允许加密,过期将是datetime类型)。
然后,您将实现以下sql命令:

INSERT INTO <your table> (Password , Expiration         ) 
      VALUES             (%s       , DATEADD(NOW(),3600))

[为清晰起见添加空格]
把那根线送到db那里 %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)

请注意,我让db检查当前时间。

相关问题