SuperAPI AI 工具集

erpnext-database

数据与分析

查看项目

更新于 10-15 22:17

技能介绍

用途:在 ERPNext/Frappe v14-v16 中执行数据库操作时提供参考,覆盖 frappe.db 方法、ORM 模式、原生 SQL、缓存与事务。

主要能力:Frappe 提供三层数据库抽象——高层 ORM(frappe.get_doc、frappe.new_doc,带校验的文档 CRUD)、中层查询(frappe.db.get_list、frappe.db.get_value,带过滤读取)、底层 SQL(frappe.db.sql、frappe.qb,复杂查询与报表)。原则是始终使用适合场景的最高抽象层级。

使用方式:创建/修改/删除文档用 frappe.get_doc() 配合 .insert()/.save()/.delete();读取单个文档,频繁变更用 frappe.get_doc(),很少变更用 frappe.get_cached_doc();列表查询,需用户权限用 frappe.db.get_list(),不需权限用 frappe.get_all();单字段值用 frappe.db.get_value(),Single DocType 用 frappe.db.get_single_value();绕过触发器的直接更新用 frappe.db.set_value() 或 doc.db_set();含 JOIN 的复杂查询用 frappe.qb 或 frappe.db.sql()。过滤支持 =、!=、>、>=、in、between、like、is set/not set 等操作符。缓存可用 frappe.cache.set_value/get_value/delete_value,或 @redis_cache(ttl=...) 装饰器并调用 .clear_cache() 失效。事务由框架自动管理,POST/PUT 请求与后台任务在成功后提交、异常时回滚,手动 savepoint 较少使用。

限制与规则:禁止在 SQL 中使用字符串格式化,必须参数化以防注入;禁止在控制器钩子中调用 frappe.db.commit();查询必须分页(如 page_length);避免 N+1 查询,应批量获取。版本差异:事务钩子与 bulk_update 在 v15/v16 可用,v14 不支持;聚合语法 v16 改为字典形式。参考文件包括 methods-reference.md、query-patterns.md、caching-patterns.md、examples.md、anti-patterns.md。具体收费与平台信息暂未提供。