пользовательский ввод ищется в базе данных mysql python 3.4

0

Я пытаюсь ввести данные пользователя и выполнить поиск в таблице базы данных. но оператор if не работает должным образом. Он показывает одинаковые результаты для существующих значений и значений, которые не существуют. Таблица студентов, содержащая first_name, last_name, возраст, доход, степень
и я беру возраст в качестве пользователя. если инструкция не работает правильно. вот мой код: я пробовал много разных сценариев

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()
  • 1
    Во-первых, вы не должны использовать форматирование строк для запросов, так как это риск внедрения SQL-кода. Во-вторых, ваш результат будет возвращен как кортеж, содержащий один элемент, поэтому вам нужно взять индекс [0] для результата, чтобы получить фактическое значение.
  • 0
    спасибо, но мой оператор if не работает, я также использовал results = cursor.fetchall () [0], он показывает только одно значение, но проблема в том, что оператор не работает.
Показать ещё 8 комментариев
Теги:
fuzzy-logic
python-3.4

1 ответ

0
Лучший ответ

Я пытаюсь ответить на ваш вопрос и ваши комментарии. Возможно, вам нужно что-то вроде следующего, где вы полагаетесь на ложную ценность при неудачном поиске:

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

Такой поиск не требует каких-либо commit или rollback, вы просто запрашиваете базу данных, поэтому последняя часть вашего кода не имеет для меня смысла.

Ваш текущий запрос вернет все случаи, когда age равен текущему значению. Если целью является просто посмотреть, существует ли она, тогда вы можете ограничить запрос и использовать fetchone().

cursor.execute("SELECT age FROM STUDENTS WHERE age=%s LIMIT 1", (age,))
  • 0
    да, мне нужны данные :) спасибо
  • 0
    @Rida Это действительно работает для вашей проблемы? Это может быть более эффективным для этой цели, если он делает то, что вы хотите.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню