python - 在 WHERE 子句中使用占位符查询记录是否存在
问题描述
我正在编写一个登录 python 脚本来验证用户帐户是否存在于 SQLite 数据库中。如何在我的 sql 语句中插入占位符,以根据数据库表中存在的记录验证用户输入?或者如果数据库很大,我可以在不使用 for 循环的情况下应用什么其他替代方案,这可能会很慢?
使用 python3 作为我的基本代码并为数据库集成 Sqlite,我尝试在用户输入后使用 EXISTS 子句,方法是为代表用户输入的值包含占位符。Exists 子句通常返回我已分配给变量的 1(True) 或 0(False),因此如果针对“IF 选择器”进行检查,则应验证“Log”表中是否存在帐户记录。
print('Logging into an existing account...')
try:
self.user = input('Enter user name: ')
self.pas = input('Enter password: ')
self.log = (self.user,self.pas)
self.sql = '''SELECT EXISTS (SELECT 1 FROM Log WHERE
Name=? AND Password=?);'''
self.cur.execute('SELECT * FROM Log;')
self.val = self.cur.execute(self.sql,self.log)
if self.val == 1:
print(f'\nLogged in as {self.user}')
time.sleep(2)
else:
print('\nAccount is non-existent!')
time.sleep(2)
预期结果:根据 EXISTS 子句存在的用户记录应始终返回 1,如果由“IF 选择器”验证,则应为“真”,因此输出“以(用户)身份登录”。
实际结果:尽管数据库表中存在用户记录且没有错误,但输出为“帐户不存在”。
解决方案
execute() 解析 SQL 语句和一个元组。在我的例子中,元组包含我的变量。因此,我只需要使用 fetchone() 获取 execute() 函数返回的值。假设返回的值必须是一个包含整数的行,我将其分配给变量并应用索引来确定实际值。在使用 IF 进行测试时,我得到了预期的结果!
self.sql = '''SELECT EXISTS (SELECT 1 FROM Log WHERE Name=? AND
Password=?);'''
self.cur.execute(self.sql,self.log)
self.val = self.cur.fetchone()
if self.val[0]==1:
time.sleep(1)
print(f'\nLogged in as {self.user}\n')
推荐阅读
- powershell - 使用 Invoke-CimMethod 触发安装 SCCM 更新时出错
- javascript - 使用 Javascript 进行 HTML 编码,用于使用文本表单将文本字段连接在一起
- spring - (OAuth2) 使用 Spring Boot 和 Spring Security 的授权失败
- c# - MVC API 在正文中发送数据
- reactjs - 将函数转换为使用回调
- python-3.x - 一些 Python Confluent Kafka Consumer 挂起而无法正常工作
- swift - Swift(UI) 多层 SVG 图像
- sql - 如何删除每行的id等于另一个表的id的所有行(SQL Server)
- mysql - 如何在 MySQL 中通过 YEARWEEK 检索上周?
- vue.js - Google Oauth 未将 www.domain.com 和 domain.com 识别为同一网站