SQL INSERT INTO - Дубликаты все еще существуют (Как изменить вставку в?) - PullRequest
0 голосов
/ 01 июня 2019

У меня есть 3 таблицы MariaDB-SQL, и я хочу вставить некоторые данные:


* Ресторан 1005 ** * 1006 ID_Restaurant (первичный ключ, автоинкремент) RestaurantName Местоположение Restaurant_has_Request

  • ID_Restaurant (внешний ключ)
  • ID_Request (внешний ключ)

Запрос

  • ID_Request (первичный ключ, автоинкремент)
  • Дата
  • Взрослые

Один ресторан имеет 0 или бесконечность запросов. Один запрос может иметь 1 или бесконечность ресторанов.

Я перебираю сайт запроса только для одного запроса. Это означает, что я хочу обработать сначала один запрос, а затем сохранить соответствующий один или несколько ресторанов. После того, как я это сделаю, будет обработан другой запрос и т. Д.

У меня есть следующий код Python для вставки данных:

cursor.execute('insert into Restaurant(RestaurantName, Location) values(%s, %s)',(RestaurantName, Location))

# ID from last insert
ID_Restaurant_Cache = cursor.lastrowid

cursor.execute('insert into Request(Date, Adults) values(%s, %s)',(Date, Adults))

# ID from last insert
ID_Request_Cache = cursor.lastrowid

cursor.execute('insert into Restaurant_has_Request(ID_Restaurant, ID_Request) values(%s, %s)',(ID_Restaurant_Cache, ID_Request_Cache))

Проблема в том, что у меня все еще есть дубликаты ... Как я могу изменить код Python, который использует существующую запись из ресторана, если она уже существует (RestaurantName & Location уже находится в базе данных)? У меня также есть дубликаты для запроса. Я хочу использовать один и тот же идентификатор запроса для одной итерации, а затем я хочу использовать другой идентификатор запроса.

Спасибо:)

Ответы [ 2 ]

0 голосов
/ 01 июня 2019

Пожалуйста, укажите SHOW CREATE TABLE.

Не должно Restaurant_has_Request иметь

PRIMARY KEY(ID_restaurant, ID_request),
INDEX(ID_request, ID_restaurant)
0 голосов
/ 01 июня 2019

Перед вставкой необходимо проверить, существует ли ресторан.

cursor.execute('select ID_Restaurant from Restaurant where RestaurantName = %s', (RestaurantName,))
row = cursor.fetchone()
if row:
    ID_Restaurant_Cache = row[0]
else:
    cursor.execute('insert into Restaurant(RestaurantName, Location) values(%s, %s)',(RestaurantName, Location))
    ID_Restaurant_Cache = cursor.lastrowid

Также необходимо добавить уникальный индекс в столбец RestaurantName, чтобы избежать дублирования.

...