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

如何使用frappe.db.delete语法删除符合筛选条件的单条记录?

错误原因

你原来的代码存在三个核心问题:

  • 代码中使用了中文全角引号(‘/“),不符合Python语法要求,会直接触发语法错误
  • Frappe ORM的过滤条件不支持直接写(运算符, 值)的元组格式作为字段值,语法不兼容
  • 就算语法修复,基于modified字段过滤如果不加限制会删掉所有匹配该修改时间的记录,无法满足只删1条的需求

最稳妥的实现方案

Frappe 中所有 DocType 的记录都有唯一主键 name,推荐先查询到要删除的最新记录的主键,再基于主键删除,100% 保证只删1条不会误操作:

# 第一步:查询符合筛选条件的最新1条记录的主键
target_record_name = frappe.db.get_value(
    "Warehouse Locations",
    {
        "warehouse": warehouse,
        "parent": item_code,
        "shelf": shelf
    },
    "name",
    order_by="modified desc", # 按修改时间倒序,取最新的1条
    limit=1
)

# 第二步:存在匹配记录再执行删除
if target_record_name:
    frappe.db.delete("Warehouse Locations", {"name": target_record_name})
    # 业务需要提交事务的话可加:frappe.db.commit()

基于modified字段匹配的修正写法

如果你能确定同筛选条件下不会出现两条modified时间完全一致的记录,也可以直接修正过滤语法后加limit参数实现需求:

frappe.db.delete(
    "Warehouse Locations",
    {
        "warehouse": warehouse,
        "parent": item_code,
        "shelf": shelf,
        "modified": last_record_to_keep[0].modified # 等于匹配直接传值即可,不需要加元组
    },
    limit=1 # 限制最多只删1条匹配记录
)

内容的提问来源于stack exchange,提问作者Mike Z

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:09:00