Python SQLite3数据库查询绑定错误

Python SQLite3 database query binding error

我正在尝试查询 sqlite3 数据库以检查是否存在唯一用户 ID。它的工作原理是用户单击 Tkinter 按钮,然后输入他们的 idTag 值。命令 reader.read() 用于获取标签的值。一旦用户输入了他们的 idTagdatacheck(): 函数将检查数据库的 userID 列以找到匹配的 idTaguserID.

错误信息sqlite3.InterFaceError: Error binding parameter 0 - probably unsupported type

注意:idTaguserID 是 SHA-256 哈希值

from tkinter import *
import sqlite3 as sql
import RPi.GPIO as GPIO
from mfrc522 import SimpleMFRC522
reader = SimpleMFRC522()

# Tkinter button click Command 
def chk():

    # Function that handels getting User ID 
    def tagScanner():
        # Get user id value
        idTag = reader.read()
        # If tag is scanned 
        if idTag:
            # call Database function to check returned idTag
            dataCheck(idTag)
            return idTag

    # Function handles SQLite3 Database     
    def dataCheck(idTag):
        Database = sql.connect('MedaDataBase.db')
        # cursor
        c = Database.cursor()
        # Check if the idTag maches a value in the userID column of sqlite DB
        query = 'SELECT userID FROM Users WHERE userID = ?'

        c.execute(query, (str(idTag),))
        row_returned = c.fetchall()
        if id in row_returned == idTag:
            # Found a matching row
            print('User Verified')
        else:
            print('Denied')
        Database.close()

    # Call scanning function 
    tagScanner()

idTag 的数据类型一定是问题所在,要摆脱它,只需将查询更改为:

c.execute(query, (str(idTag),))

然后不使用 c.fetchone(),而是使用 c.fetchall() 并索引到列表中,查看并选择所需的必要数据。虽然,我认为您不需要索引,因为数据库中唯一的数据是单个用户 ID,在这种情况下,我不会为此使用数据库,而只是将这些数据存储在某个地方并进行相同的检查。