Python 使用产品和变体填充电子商务表

Python 使用产品和变体填充电子商务表,python,sql,database,postgresql,dataframe,Python,Sql,Database,Postgresql,Dataframe,我在建立一个时尚聚合网站的过程中,遇到了一个产品和变体问题 为了描述数据,一种产品可以有多种变体。e、 g,“夏装”,有3种颜色和8种尺码。因此,该产品将有24种变体产品,通用产品为“母”产品。每种变体可能有不同的定价、可用性、尺寸、颜色等 我的问题涉及到表填充——我的刮刀输出每个产品的每个变体及其相关数据,这些数据可以是CSV或pandas数据帧格式。你们谁能告诉我如何从这些数据填充两个数据库表: 带有父产品的表,每个变体都有外键 父产品的所有变体产品,链接到该产品,以便在我最终的网站上,可

我在建立一个时尚聚合网站的过程中,遇到了一个产品和变体问题

为了描述数据,一种产品可以有多种变体。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;
    $$;