Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在数据库mysql python 3.4中搜索的用户输入_Python_Mysql_Python 3.4_Fuzzy Logic - Fatal编程技术网

在数据库mysql python 3.4中搜索的用户输入

在数据库mysql python 3.4中搜索的用户输入,python,mysql,python-3.4,fuzzy-logic,Python,Mysql,Python 3.4,Fuzzy Logic,我试图从用户那个里获取输入并在数据库表中搜索它。但我的if语句工作不正常,它对存在的值和不存在的值显示相同的结果。包含名、姓、年龄、收入、学位的学生表 我把年龄作为用户输入。if语句不能正常工作。 这是我的代码:我尝试了许多不同的场景 import pymysql db= pymysql.connect("localhost","testuser","admin","TESTDB") cursor =db.cursor() age= input("Please select a age:\n")

我试图从用户那个里获取输入并在数据库表中搜索它。但我的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()

我想避开你的问题和评论。可能您希望在失败的查找中使用错误值,如下所示:

import pymysql
db= pymysql.connect("localhost","testuser","admin","TESTDB")
cursor =db.cursor()
age= input("Please select an age:\n")

cursor.execute("SELECT age FROM STUDENTS WHERE age=%s", (age,))
data = cursor.fetchall()
if data:
    print("Age exists")
else:
    print("Age does not exist")
这种查找不需要任何类型的
提交
回滚
,您只是在查询数据库,因此代码的后一部分对我来说没有意义

当前查询将返回
age
等于当前值的所有情况。如果目的只是查看它是否存在,那么您可以限制查询并使用它


首先,您不应该对查询使用字符串格式,因为这是一种SQL注入风险。其次,您的结果将作为包含一项的元组返回,因此您需要对结果进行
[0]
索引以获得实际值。谢谢,但是我的if语句不起作用,我也使用了results=cursor.fetchall()[0],它只显示一个值,但问题是if语句不起作用。请尝试
打印(repr(结果),repr(age))
。数字
83
与字符串
“83”
不同(也不等于)。这是你的问题吗?(我的意思是在
[0]
问题之上,这也是一个问题,你还没有解决。)另外,为什么您要尝试提交或回滚一个未做任何更改的事务?为什么只有在提交失败时才关闭数据库,否则就会泄漏?同时,
cursor.fetchall()
返回一个项的一个元组列表,而不是一个项的元组。因此您实际上需要
[0][0]
-首先获取结果中的第一(唯一)行,然后获取该行中的第一(唯一)列。是的,我需要wt:)thnx@Rida它真的能解决你的问题吗?如果它能满足您的需求,那么它在这方面的效率可能会更高。是的!比较并给出准确的结果。如何使其高效?
cursor.execute("SELECT age FROM STUDENTS WHERE age=%s LIMIT 1", (age,))