Как дать mysql-записи тайм-аут, истекающий через 30 минут? - PullRequest
0 голосов
/ 06 мая 2018

Я нигде не смог найти что-то актуальное. Я хотел бы установить тайм-аут на «пароль», который я сохраняю на mysql с python.

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

Ответы [ 2 ]

0 голосов
/ 08 мая 2018
  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;")
0 голосов
/ 07 мая 2018

Поскольку я недостаточно знаком с Python и, следовательно, я оставлю специфику кода для вас; Я представлю только идею решения и соответствующие команды SQL (необходимо проверить синтаксис, поскольку у меня нет среды для его проверки).

Допустим, вы хотите установить таймаут в 1 час с момента сохранения пароля, и ваша таблица имеет (как минимум) следующие два поля: Password и Expiration (я предполагаю, что пароль будет двоичный тип, чтобы разрешить шифрование и срок действия будет иметь тип DATETIME).

Затем вы бы реализовали следующую команду SQL:

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

[пробелы добавлены только для ясности]

и отправьте эту строку в БД, где %s будет заменено значением пароля.

Что DATEADD(NOW(),3600) делает:

  1. Получает текущую дату и время,
  2. Добавляет один час к нему.

Как только вы вставите это в свою таблицу, вы позже получите пароль, используя следующую команду:

SELECT Password
  FROM <your table>
 WHERE User       = <could be Username or any other key that you are using now>
   AND Expiration > NOW()

означает, получить пароль (если есть), срок действия которого истекает.

Надеюсь, это то, что вы искали.

Ура !!

EDIT

Я добавлю ваш код после исправлений:

@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)

Обратите внимание, что я уезжаю в БД для проверки текущего времени.

...