Извлечение данных из базы данных sqlite3 с помощью Python

#python #sqlite #rfid

#python #sqlite #rfid

Вопрос:

Итак, я пытаюсь получить все идентификаторы пользователей из моей базы данных sqlite3. У меня есть графический интерфейс tkinter с регистрацией Button когда пользователь нажимает кнопку, ему предлагается отсканировать свою метку (rfid). Я пытаюсь сравнить идентификатор тега после сканирования тега со всеми идентификаторами пользователей в базе данных и проверить, совпадают ли они. Если они совпадают, я пытаюсь напечатать User Verified, если тег не соответствует одному из идентификаторов пользователя в таблице, которую я пытаюсь напечатать, Пользователь не существует, отказано

 from tkinter import *
import sqlite3 as sql
import RPi.GPIO as GPIO
from mfrc522 import SimpleMFRC522

reader = SimpleMFRC522()

global r
global uid_tag
def chk():
    Database = sql.connect('MedaDataBase.db')
    # cursor
    c= Database.cursor()

    #Query uid database
    c.execute("SELECT*, userID FROM Users ")

    #Fetch all uids from Database
    r= c.fetchall()

    if r:
        #Getting user uid from tag 
        id,uid_tag = reader.read()
        print(uid_tag)
        checker()

def checker():
    global uid_tag
    global r
    for x in r:
        #If userId from tag is in the database 
        if uid_tag == x:

            print("User Verified")
        else:
            print("Denied")    
            Database.commit()
            Database.close()
  

Ответ №1:

в chk() r не определен как глобальный, поэтому вы читаете в локальную переменную, а глобальная переменная все еще неинициализирована.

Комментарии:

1. Да, это было оно, спасибо! Однако сейчас у меня возникла новая проблема: данные не извлекаются из базы данных, потому что выбрасывается else оператор в функции checker().

2. @Tibah_lun Ты знаешь, что x это будет набор результатов, верно? Поэтому if uid_tag == x: будет false, так как uid_tag не равно (…,….,…), Моя попытка x[0] или x[1] или что-то еще?