fbpx

SQL — дубликаты записи

327 просмотра
0
0 Комментариев

при парсинге магазинов у товаров возникает одна проблема:

В случае если магазина нету в базе данных, то он добавляется в него.
При работе в несколько потоков возникает иногда ситуация:

У нескольких товаров (1 поток, под каждый товар) может иметь один и тот же магазин, и если этого магазина нет, то они одновременно добавляют одну и ту же запись в бд, хотя проверка на наличие этого магазина есть.

Как можно обойти эту проблему? Может как нибудь сделать совокупность несколько столбцов уникальными? (можно ли вообще так сделать?)

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

Код

sql = """SELECT id FROM shop WHERE company=%s and name=%s and address=%s and locality_id=%s and class=%s"""
data = [(company, name_shop, address_shop, city_id, "1")]
print(data)
row = select_request_db(sql,data)
log.info("Выборка")
if(len(row)==1):
  shop_id = row [0]
else:
  if(len(row)==0):
     sql = """INSERT INTO shop(class,company,name,address,locality_id) VALUES (%s, %s, %s, %s,%s)"""
     data = [("1",company,name_shop,address_shop,city_id)]
     shop_id= insert_request_db (sql,data)
     log.info("Добавление")
  else:
     print("Ошибка")
     exit(0)

введите сюда описание изображения


Добавить комментарий

0 Answers

Python Опубликовано 16.07.2019
Напишите свой ответ на данный вопрос.
Scroll Up