Python SQLite3数据库查询绑定错误
Python SQLite3 database query binding error
我正在尝试查询 sqlite3 数据库以检查是否存在唯一用户 ID。它的工作原理是用户单击 Tkinter 按钮,然后输入他们的 idTag
值。命令 reader.read()
用于获取标签的值。一旦用户输入了他们的 idTag
,datacheck():
函数将检查数据库的 userID 列以找到匹配的 idTag
和 userID
.
错误信息:sqlite3.InterFaceError: Error binding parameter 0 - probably unsupported type
注意:idTag
和 userID
是 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,在这种情况下,我不会为此使用数据库,而只是将这些数据存储在某个地方并进行相同的检查。
我正在尝试查询 sqlite3 数据库以检查是否存在唯一用户 ID。它的工作原理是用户单击 Tkinter 按钮,然后输入他们的 idTag
值。命令 reader.read()
用于获取标签的值。一旦用户输入了他们的 idTag
,datacheck():
函数将检查数据库的 userID 列以找到匹配的 idTag
和 userID
.
错误信息:sqlite3.InterFaceError: Error binding parameter 0 - probably unsupported type
注意:idTag
和 userID
是 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,在这种情况下,我不会为此使用数据库,而只是将这些数据存储在某个地方并进行相同的检查。