You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用dotenv连接PostgreSQL,以列表作为cursor.execute参数批量删指定ID行

批量删除PostgreSQL中指定ID的数据行

原代码存在的问题

  • SQL语句用=匹配ID列表,PostgreSQL里匹配多个值得用IN操作符,=只能对应单个值
  • 没提交事务:PostgreSQL默认不会自动提交增删改操作,不提交的话,连接关闭后操作会回滚,等于白删
  • 多余的cursor.close():with conn.cursor()上下文管理器会自动关闭游标,不用手动调用

修正后的代码

ids_to_delete = df["food_id"].tolist()

# 用上下文管理器管理连接,自动处理关闭逻辑
with create_conn() as conn:
    with conn.cursor() as cursor:
        # 使用IN操作符批量匹配ID
        sql = """
        DELETE FROM food_recommandations.food_categorisation
        WHERE food_categorisation.food_id IN %(ids)s
        """
        # 将列表转为元组传入,psycopg2会自动适配PostgreSQL的语法
        cursor.execute(sql, {"ids": tuple(ids_to_delete)})
        # 提交事务,确保删除操作生效
        conn.commit()

关键说明

  • 必须调用conn.commit():PostgreSQL的事务机制要求,所有增删改操作都得提交才能持久化到数据库
  • 列表转元组:psycopg2对元组支持更友好,会自动把它转成(id1, id2, id3)的格式,适配IN语句的需求
  • 连接管理:用with语句管数据库连接,能避免忘关连接导致的资源泄漏问题

内容的提问来源于stack exchange,提问作者Louis Martin du Nord

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 14:05:38