Python 使用产品和变体填充电子商务表
我在建立一个时尚聚合网站的过程中,遇到了一个产品和变体问题 为了描述数据,一种产品可以有多种变体。e、 g,“夏装”,有3种颜色和8种尺码。因此,该产品将有24种变体产品,通用产品为“母”产品。每种变体可能有不同的定价、可用性、尺寸、颜色等 我的问题涉及到表填充——我的刮刀输出每个产品的每个变体及其相关数据,这些数据可以是CSV或pandas数据帧格式。你们谁能告诉我如何从这些数据填充两个数据库表:Python 使用产品和变体填充电子商务表,python,sql,database,postgresql,dataframe,Python,Sql,Database,Postgresql,Dataframe,我在建立一个时尚聚合网站的过程中,遇到了一个产品和变体问题 为了描述数据,一种产品可以有多种变体。e、 g,“夏装”,有3种颜色和8种尺码。因此,该产品将有24种变体产品,通用产品为“母”产品。每种变体可能有不同的定价、可用性、尺寸、颜色等 我的问题涉及到表填充——我的刮刀输出每个产品的每个变体及其相关数据,这些数据可以是CSV或pandas数据帧格式。你们谁能告诉我如何从这些数据填充两个数据库表: 带有父产品的表,每个变体都有外键 父产品的所有变体产品,链接到该产品,以便在我最终的网站上,可
我已经尝试创建一个表“products”,并为每个产品变量分配相同的UUID,但是搜索速度非常慢。感谢您的建议。您的问题缺乏足够的细节,因此任何答案都必须缺乏细节。但以下是一个可能的解决方案。这个过程是首先加载一个临时表(可能这是当前的“产品”表可以提供该功能)。此表是暂时的,因为其内容基本上对单个加载有效,但它在会话之间保持不变。比如:
create table product_variants_stage( product_name text
, var_class text
, var_val text
-- ... other product/variant attributes
);
create table products( prod_id uuid default gen_random_uuid() primary key
, name text not null unique
--... other product attributes
) ;
create table variants ( prod_var_id uuid default gen_random_uuid() primary key
, prod_id uuid not null
references products(prod_id)
, var_class text not null
, var_val text not null
-- ... other variant attributes for each variant
, constraint prod_var_bk unique (prod_id, var_class, var_val)
) ;
现在创建一个过程,该过程将填充产品表和变量表的唯一业务键(产品名称、变量类和变量值)
看注:演示使用Postgres 13构建。如果您不在该版本上,则需要另一个函数来生成UUID。您可能还需要将过程load_product_variants定义为返回void(并删除提交)的函数
create or replace procedure load_product_variants()
language plpgsql
as $$
begin
insert into products ( name
--...
)
select product_name
--...
from product_variants_stage
where product_name is not null
on conflict (name) do nothing;
insert into variants ( prod_id
, var_class
, var_val
--...
)
select p.prod_id
, s.var_class
, s.var_val
--...
from product_variants_stage s
join products p
on s.product_name = p.name
where s.var_class is not null
and s.var_val is not null
on conflict (prod_id,var_class,var_val) do nothing;
commit;
end;
$$;