Я пытаюсь создать смарт-замок на Python, используя RFID и пароль вместо обычного «1234», я использую Time OTP с PyOTP Libray.
На данный момент я застрял в том, как присвоить значение переменной secret
в функции if, используя данные из secret
от пользователей таблицы.
Как мне присвоить значение secret
из таблицы пользователей переменной secret
ЕСЛИ ФУНКЦИЯ
print("Place card near scanner")
id, text = reader.read()
cursor.execute("Select id From users Where rfid_uid = "+str(id))
result = cursor.fetchone()
if cursor.rowcount > = 1:
print("Welcome\nType the code from your authenticator app")
secret = ('''The data from "secret" in users table''')
Таблица пользователей
+----+--------------+-------------+------------------+---------------------+
| id | rfid_uid | name | secret | created |
+----+--------------+-------------+------------------+---------------------+
| 1 | 939940479059 | Blue Dongle | LONGSTRINGOFCODE | 2020-12-10 09:07:34 |
+----+--------------+-------------+------------------+---------------------+
Спасибо
Если вы измените оператор выбора, вы сможете выбрать secret
в дополнение к id
.
print("Place card near scanner")
id, text = reader.read()
cursor.execute("SELECT id, secret FROM users WHERE rfid_uid = "+str(id))
result = cursor.fetchone()
if cursor.rowcount >= 1:
print("Welcome\nType the code from your authenticator app")
secret = result[1]
Ах, я обновил свой ответ. После вызова fetchone() функция fetchall() не может получить результат, который уже был получен.
Он сказал
No result set to fetch from
изrows = cursor.fetchall()
Но когда я отредактировалresult = cursor.fetchone()
наfetchall()
и изменил строку послеprint
только наsecret = result[1]
, он ответилindex out of range
, а если этоsecret = result[0]
, он просто ответил печатьюid
иsecret
. Есть идеи, почему это произошло? Спасибо за ваш ответ.