如何使用 Python 更新来自数据框的基于 postgres 表列的值

乘风 python 474

原文标题How to update postgres table column based values coming from dataframe using Python

我有一个名为 Risk 的表,它有 4 列。此表列risk_state值需要使用来自 Dataframe (DF) 的riskState值进行更新。

如何从 python 为我的 uodate 查询编写更新语句。我不确定如何将值从数据框传递到表以进行更新。

风险

risk_id  shipment_id customer_code  risk_state
 125AB     ASW11       JJ           TBW
 326BW     GY456       JJ           TBW
 676BY     ABW11       JJ           TBW
 678BY     BYM11       RR           VT

数据框 (DF)

riskId   shipmentId customerCode  riskState
 125AB     ASW11       JJ           VT
 326BW     GY456       JJ           VB
 676BY     ABW11       JJ           VT
 678BY     BYM11       RR           VT

风险表的预期输出

risk_id  shipment_id customer_code  risk_state
     125AB     ASW11       JJ           VT
     326BW     GY456       JJ           VB
     676BY     ABW11       JJ           VT
     678BY     BYM11       RR           VT

代码

#连接字符串

postgres_str = f'postgresql://{username}:{password}@{host}:{port}/{dbname}'
# Create the connection and cursor
rds_conn = psycopg2.connect(postgres_str)
rds_cur = rds_conn.cursor()
rds_cur.execute("""update risk where...""")

rds_conn.commit()

这怎么可能……

原文链接:https://stackoverflow.com//questions/71554533/how-to-update-postgres-table-column-based-values-coming-from-dataframe-using-pyt

回复

我来回复
  • Amirhossein Kiani的头像
    Amirhossein Kiani 评论

    我不是Postgresql方面的专家,但我相信您需要的是具有特定left_onright_on参数的merge函数:

    (risk.merge(Dataframe, 
               left_on=["risk_id", "shipment_id", "customer_code"], 
               right_on=["riskId", "shipmentId", "customerCode"])
                [["risk_id","shipment_id", "customer_code", "riskState"]] 
               .rename(columns={"riskState":"risk_state"}))
    

    输出

    risk_id shipment_id customer_code risk_state
    125AB ASW11 JJ VT
    326BW GY456 JJ VB
    676BY ABW11 JJ VT
    678BY BYM11 RR VT

    我猜你可以使用这个输出来更新你的 SQL 数据库。

    2年前 0条评论