我有3个MariaDB-SQL表,我想插入一些数据:
餐厅
Restaurant_has_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。
谢谢:)
答案 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)