【发布时间】:2018-07-05 20:55:04
【问题描述】:
我正在尝试从用户那里获取输入并在数据库表中进行搜索。但是我的 if 语句无法正常工作,它对存在的值和不存在的值显示相同的结果。包含名字、姓氏、年龄、收入、学位的学生表
我将年龄作为用户输入。 if 语句不能正常工作。
这是我的代码:我尝试了许多不同的场景
import pymysql
db= pymysql.connect("localhost","testuser","admin","TESTDB")
cursor =db.cursor()
age= input("Please select a age:\n")
cursor.execute(f"SELECT AGE FROM STUDENTS WHERE age={age}")
results=cursor.fetchall()
print(results)
if (results ==age):
print("age exit!")
else:
print("not exists")
try:
db.commit()
except:
db.rollback()
db.close()
【问题讨论】:
-
首先,您不应该对查询使用字符串格式,因为这存在 SQL 注入风险。其次,您的结果将作为包含一项的元组返回,因此您需要在结果上使用
[0]索引以获得实际值。 -
谢谢,但是我的 if 语句不起作用,我也使用了 results=cursor.fetchall()[0],它只显示一个值,但问题是 if 语句不起作用。跨度>
-
试试
print(repr(results), repr(age))。数字83与字符串"83"不同(也不等于)。那是你的问题吗? (我的意思是在[0]问题之上,这也是一个你还没有解决的问题。) -
另外,您为什么要尝试提交或回滚未进行任何更改的事务?为什么只有在提交失败时才关闭数据库,否则会泄漏它?
-
同时,
cursor.fetchall()返回一个包含一个项目的元组的列表,而不是一个项目的元组。所以你实际上需要[0][0]——首先获取结果中的第一(唯一)行,然后获取该行中的第一(唯一)列。
标签: python mysql python-3.4 fuzzy-logic