SQL INSERT INTO-重复项仍然存在(如何修改插入项?)

时间:2019-05-31 22:30:28

标签: python sql database insert mariadb

我有3个MariaDB-SQL表,我想插入一些数据:


餐厅

  • 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代码? 我也有重复的请求。我想使用相同的请求ID进行一次迭代,然后再使用另一个请求ID。

谢谢:)

2 个答案:

答案 0 :(得分:0)

插入之前,您需要检查餐厅是否已经存在。

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列上添加唯一索引,以防止重复。

答案 1 :(得分:0)

请提供SHOW CREATE TABLE

Restaurant_has_Request不应该拥有

PRIMARY KEY(ID_restaurant, ID_request),
INDEX(ID_request, ID_restaurant)