Python · 39 строк
Продавец загружает CSV с колонками sku;qty — сколько товара сейчас лежит на его складе. Файлы до 200 000 строк, продавец часто загружает один и тот же файл повторно, если не уверен, что первая загрузка прошла.
Отметьте строки с ошибками.
В работе: Личный кабинет продавца, раздел «Остатки»: схема FBS, продавец хранит товар у себя.
Как проверяем
Нажмите на строку с ошибкой и коротко напишите, что не так. Баг засчитан, если отмечена хотя бы одна его строка. Зачёт — найдено не меньше 60 % багов с учётом серьёзности (критичный весит 3, обычный 2, мелкий 1), а лишних отметок не больше, чем багов в коде. Пустые строки, скобки и комментарии лишними не считаем. Ответ один на подход: после него показываем разбор.
Источник: на задачах Ozon: остатки продавцов на складах. Условие пересказано своими словами.
Давали на собеседовании?
Ответов пока мало — ваш поможет.
import csvimport loggingimport psycopg2log = logging.getLogger(__name__)def import_stocks(path, warehouse_id, dsn):conn = psycopg2.connect(dsn)cur = conn.cursor()f = open(path, encoding="utf-8")reader = csv.DictReader(f, delimiter=";")updated = 0for row in reader:sku = row["sku"].strip()qty = int(row["qty"])cur.execute(f"SELECT id FROM products WHERE sku = '{sku}'")product = cur.fetchone()if product is None:log.warning("unknown sku %s", sku)continuecur.execute("SELECT qty FROM stocks WHERE product_id = %s AND warehouse_id = %s",(product[0], warehouse_id),)if cur.fetchone():cur.execute("UPDATE stocks SET qty = qty + %s WHERE product_id = %s AND warehouse_id = %s",(qty, product[0], warehouse_id),)else:cur.execute("INSERT INTO stocks(product_id, warehouse_id, qty) VALUES (%s, %s, %s)",(product[0], warehouse_id, qty),)conn.commit()updated += 1return updated