Как искать определенное значение в определенной таблице и возвращать соответствующий ответ из другой таблицы с помощью Python

#python #mysql #database

Вопрос:

У меня есть база данных под названием Jarv, в которой есть две таблицы с именами (COM) и (RES), и в каждой таблице три таких столбца:

  1. (COM) таблица:

(ID) int , (CName) varchar , (CType) varchar

  1. (RES) таблица:

(ID) int , (RName) varchar , (RType) varchar

Я хочу получить ввод от пользователя, затем проверить, существует ли значение в столбце CName таблицы (COM), оно возвращает (ИДЕНТИФИКАТОР) той же строки, затем переходит в другую таблицу, которая называется (RES), и возвращает значение столбца (RName) с совпадением (ID), например:

Таблица COM:

 ID     |      CName      |      CType     

1      |        Hi       |     Greeting
2      | whats your name |     Greeting
3      |   how are you   |     Greeting
 

Таблица RES:

 ID     |      RName      |      RType     

1      |      Hello      |     Greeting
2      | My name is Jarv |     Greeting
3      |    I'm great    |     Greeting
 

Так, например, ввод пользователя (Привет), поэтому у нас есть переменная типа ( COMM = «Привет» ):

  1. Шаг первый: найдите столбец (CName) внутри таблицы (COM) для значения, равного (Привет), если найдено, перейдите к шагу два — > «Извините, повторите еще раз».
  2. Шаг второй: 2 — верните значение (ID) соответствующей строки с (Hi) в столбце (ID), если найдено, перейдите к третьему шагу — > «Извините, повторите еще раз».
  3. шаг третий: 3 — найдите столбец (RName) внутри таблицы (RES) для сопоставления значения столбца (ID) со столбцом (ID) таблицы (COM) на последнем шаге, если найдено, перейдите к шагу четыре -> «Извините, повторите еще раз»
  4. шаг четвертый: 4 — верните значение столбца (RName) в той же строке, что и строка (ID), в переменную с именем RESP, если найдено, выведите(RESP) иначе —> «Извините, повторите еще раз»

Комментарии:

1. Пожалуйста, предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.

2. В дополнительном коде нет необходимости, вопрос ясен, и ответ-это функция, поэтому ясно, что она может делать.

Ответ №1:

Если я правильно понял вопрос, вы могли бы попробовать что-то вроде этого:

 def getResponse(userInput):
    # Select id 
    cursor.execute("SELECT ID FROM COM WHERE CName = %s", (userInput, ))
    result = cursor.fetchone()

    # Check if id in DB 
    if result == None:
        return "Sorry, repeat again"
    else:
        # Select RName with COM.ID 
        cursor.execute("SELECT RName FROM RES WHERE ID = %s", (result[0], ))
        result = cursor.fetchone()
        if result == None:
            return "Sorry, repeat again"
        else:
            return result[0]
 

Если не имеет значения , где он прерывается, вы также можете сделать это с помощью подзапроса или ОБЪЕДИНЕНИЯ.

Нравится:

 def getResponse(userInput):

    cursor.execute("SELECT RName FROM RES JOIN COM ON COM.ID = RES.ID "
                   "WHERE CName = %s", (userInput, ))
    result = cursor.fetchone()
    if result == None:
        return "Sorry, repeat again"
    else:
        return result[0]        
 

Или как:

 def getResponse(userInput):

    cursor.execute("SELECT RName FROM RES WHERE ID = "
                   "(SELECT ID FROM COM WHERE CName = %s)", (userInput, ))
    result = cursor.fetchone()
    if result == None:
        return "Sorry, repeat again"
    else:
        return result[0]        
 

Комментарии:

1. Ибп в качестве заполнителя должен быть %s, а не %d. Теперь это должно сработать