该技能用于处理 Frappe/ERPNext 中的数据库错误,提供错误到修复的映射表,并列出异常层级关系。\n\n主要能力:覆盖 DuplicateEntryError(HTTP 409)、DoesNotExistError(404)、LinkValidationError、LinkExistsError、MandatoryError、TimestampMismatchError、CharacterLengthExceededError、InReadOnlyMode(503)、QueryTimeoutError(v15+)、QueryDeadlockError、TooManyWritesError 及 MariaDB 连接类 InternalError 等,说明各自的 HTTP 状态、成因与建议修复方式。\n\n使用方式:连接数据库时,frappe.db.sql() 必须使用命名参数 %(name)s 加字典,禁止用 f-string、.format() 或 % 拼接,防止 SQL 注入;权限条件等动态 SQL 使用 frappe.db.escape(),或用 frappe.qb 查询构建器与 ORM 方法。insert() 应处理 DuplicateEntryError,save() 应处理 TimestampMismatchError。get_value() 在记录不存在或字段为空时返回 None 而非抛异常;exists() 返回 False;set_value() 在记录不存在时静默失败,调用前应先检查存在性。\n\n事务限制:Web 请求、控制器钩子、doc_events 自动提交,禁止手动 frappe.db.commit();调度任务、后台任务(frappe.enqueue)、bench execute 需手动提交。可用 savepoint 做部分回滚,v15+ 支持 after_commit 与 after_rollback 钩子。\n\n适用场景:Frappe/ERPNext 应用开发中数据库报错的排查与防御性编码。限制:部分异常标注版本(如 QueryTimeoutError 为 v15+),具体实现细节以官方文档为准;技能未提供收费、价格与平台信息。
frappe-errors-database
数据与分析
更新于 10-15 22:17