python - Python SQLite3 数据库查询绑定错误
问题描述
我正在尝试查询 sqlite3 数据库以检查是否存在唯一用户 ID。它的工作原理是用户单击 Tkinter 按钮,然后输入它们的idTag
值。该命令reader.read()
用于获取标签的值。一旦用户输入了他们idTag
的功能,该datacheck():
函数将检查数据库的userID列以找到匹配的idTag
和userID
。
错误信息:sqlite3.InterFaceError: Error binding parameter 0 - probably unsupported type
注意:idTag
anduserID
是 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()
usec.fetchall()
和 index 到列表中并查看并选择所需的必要数据。虽然,我认为您不需要索引,因为数据库中的唯一数据是单个用户 ID,在这种情况下,我不会为此使用数据库,而只是将这些数据存储在某处并进行相同的检查。
推荐阅读
- google-chrome - EvalError:拒绝将字符串评估为 JavaScript,因为 'unsafe-eval' - Chrome 扩展
- html - 我希望我的 main 在 Bootstrap 中与我的 jumbotron 重叠
- c++ - 即使在 getline() 之后使用 C++ cin.ignore() 也可以工作,但为什么呢?
- java - 防止java产生不正确的结果
- python - 在 pandas json 中添加一个更高一级的对象
- javascript - 从 html .class 的所有值创建 JS 数组
- android-studio - 如何让我的 Game Maker Studio 2 项目在 Android 模拟器上正常运行?
- flutter - 每次测试执行期间 Flutter 都会构建新的 .apk 文件,即使没有代码更改
- r - 查找多线串和多边形 sf r 之间的交点
- vue.js - 如果用户已经登录,如何自动登录