【问题标题】:user input searched in database mysql python 3.4在数据库mysql python 3.4中搜索的用户输入
【发布时间】: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


【解决方案1】:

我正在尝试解决您的问题和您的 cmets。也许你想要类似下面的东西,在失败的查找中依赖虚假值:

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")

这种查找不需要任何类型的commitrollback,你只是在查询数据库,所以你的代码的后半部分对我来说没有意义。

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

cursor.execute("SELECT age FROM STUDENTS WHERE age=%s LIMIT 1", (age,))

【讨论】:

  • 是的,我需要 :) thnx
  • @Rida 它真的可以解决您的问题吗?如果它做你想做的事情,它可能会更有效。
  • 是的!它比较并给出准确的结果。如何提高效率?
猜你喜欢
  • 2017-02-05
  • 2016-12-02
  • 2011-06-22
  • 1970-01-01
  • 1970-01-01
  • 2020-08-05
  • 1970-01-01
  • 2021-10-29
  • 1970-01-01
相关资源
最近更新 更多