如何让mysql记录在30分钟后超时到期?

时间:2018-05-06 10:49:40

标签: mysql database python-3.x sql-insert

我无法在任何地方找到相关内容。 我想对使用python保存在mysql上的“密码”设置超时。

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

2 个答案:

答案 0 :(得分:0)

因为我不熟悉python,所以我会把代码的细节留给你;我只会介绍解决方案和相关SQL命令的想法(语法需要验证,因为我没有测试它的环境)。

假设您要设置自保存密码时起1小时的超时时间,并且您的表格(至少)包含以下两个字段:PasswordExpiration(我假设密码将是二进制类型以允许加密,而Expiration将是DATETIME类型)。

然后,您将实现以下SQL命令:

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

[为了清晰起见而添加的空格]

并将该字符串发送到数据库,其中%s将替换为密码值。

DATEADD(NOW(),3600)的作用是:

  1. 获取当前日期和时间
  2. 加一小时。
  3. 将表格插入表格后,您将使用以下命令检索密码:

    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检查当前时间。

答案 1 :(得分:0)

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