Нужно написать сервис, который будет открывать файл с выгрузкой по маркетплейсу в xml формате и загружать его содержимое (товары, которые заключены в структурах по типу <offer id="1779352490"...
) в PostgreSQL таблицу со следующей структурой:
create table public.sku
(
uuid uuid,
marketplace_id integer
product_id bigint,
title text,
description text,
brand integer,
seller_id integer,
seller_name text,
first_image_url text,
category_id integer,
category_lvl_1 text,
category_lvl_2 text,
category_lvl_3 text,
category_remaining text,
features json,
rating_count integer,
rating_value double precision,
price_before_discounts real,
discount double precision,
price_after_discounts real,
bonuses integer,
sales integer,
inserted_at timestamp default now(),
updated_at timestamp default now(),
currency text,
barcode bigint
);
comment on column public.sku.uuid is 'id товара в нашей бд';
comment on column public.sku.marketplace_id is 'id маркетплейса';
comment on column public.sku.product_id is 'id товара в маркетплейсе';
comment on column public.sku.title is 'название товара';
comment on column public.sku.description is 'описание товара';
comment on column public.sku.category_lvl_1 is 'Первая часть категории товара. Например, для товара, находящегося по пути Детям/Электроника/Детская электроника/Игровая консоль/Игровые консоли и игры/Игровые консоли, в это поле запишется "Детям".';
comment on column public.sku.category_lvl_2 is 'Вторая часть категории товара. Например, для товара, находящегося по пути Детям/Электроника/Детская электроника/Игровая консоль/Игровые консоли и игры/Игровые консоли, в это поле запишется "Электроника".';
comment on column public.sku.category_lvl_3 is 'Третья часть категории товара. Например, для товара, находящегося по пути Детям/Электроника/Детская электроника/Игровая консоль/Игровые консоли и игры/Игровые консоли, в это поле запишется "Детская электроника".';
comment on column public.sku.category_remaining is 'Остаток категории товара. Например, для товара, находящегося по пути Детям/Электроника/Детская электроника/Игровая консоль/Игровые консоли и игры/Игровые консоли, в это поле запишется "Игровая консоль/Игровые консоли и игры/Игровые консоли".';
comment on column public.sku.features is 'Характеристики товара';
comment on column public.sku.rating_count is 'Кол-во отзывов о товаре';
comment on column public.sku.rating_value is 'Рейтинг товара (0-5)';
comment on column public.sku.barcode is 'Штрихкод';
create index sku_brand_index
on public.sku (brand);
create unique index sku_marketplace_id_sku_id_uindex
on public.sku (marketplace_id, product_id);
create unique index sku_uuid_uindex
on public.sku (uuid);
Файл большой (5+гб), полностью в оперативку не влезет, поэтому читать его нужно не полностью сразу, а по кускам (lxml.etree.iterparse
в помощь)