#python #mysql #database
Вопрос:
У меня есть база данных под названием Jarv, в которой есть две таблицы с именами (COM) и (RES), и в каждой таблице три таких столбца:
- (COM) таблица:
(ID) int , (CName) varchar , (CType) varchar
- (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 = «Привет» ):
- Шаг первый: найдите столбец (CName) внутри таблицы (COM) для значения, равного (Привет), если найдено, перейдите к шагу два — > «Извините, повторите еще раз».
- Шаг второй: 2 — верните значение (ID) соответствующей строки с (Hi) в столбце (ID), если найдено, перейдите к третьему шагу — > «Извините, повторите еще раз».
- шаг третий: 3 — найдите столбец (RName) внутри таблицы (RES) для сопоставления значения столбца (ID) со столбцом (ID) таблицы (COM) на последнем шаге, если найдено, перейдите к шагу четыре -> «Извините, повторите еще раз»
- шаг четвертый: 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. Теперь это должно сработать