beego中插入数据需先注册模型并确保字段可导出;单条用o.insert(&user)传指针,批量用o.install(users)传切片,误传类型或未注册模型会导致“table: . not found”错误。

在Beego框架中向数据库插入单条或一批记录时,必须确保模型已注册、数据库已配置且结构体字段可导出,否则会触发table: `.` not found这类致命错误。
插入单条数据
方法一:使用 o.Insert() 传入结构体实例指针
定义好模型后(如 User),先创建实例,再调用 Insert():
user := models.User{Name: "Alice", Age: 25}
o := orm.NewOrm()
n, err := o.Insert(&user)
注意:这里必须传指针,否则字段值无法写回结构体,主键ID等返回值将丢失;若传值类型(o.Insert(user))会编译失败或静默失败。
方法二:直接初始化并插入,一步到位
o := orm.NewOrm()
n, err := o.Insert(&models.User{Name: "Bob", Age: 30})
这一步操作起来很简单,直接把结构体字面量取地址传进去就行。但要注意所有字段名首字母必须大写,否则 ORM 无法反射访问。
插入批量数据
使用 orm.Install() 可一次性插入切片中的多条记录,性能远高于循环调用 Insert()。
第一步:准备一个非空的结构体切片
users := []models.User{
{Name: "Charlie", Age: 28},
{Name: "Diana", Age: 32},
{Name: "Eve", Age: 26}
}
第二步:调用 orm.Install() 传入该切片
o := orm.NewOrm()
n, err := o.Install(users)
【关键前提】:传入的必须是切片([]User),不能是指针切片(*[]User)或单个结构体;若误传 &users 或 users[0],会立即报错 Handler crashed with error table: `.` not found。
第三步:检查返回结果
n 是成功插入的记录数,err 为 nil 表示全部成功;只要有一条失败,整个批次会回滚(默认开启事务保护),err 非空且 n == 0。
常见报错与修复
错误提示:Handler crashed with error <ormer> table: `.` not found, make sure it was registered with `RegisterModel()`</ormer>
原因只有一个:模型未注册,或注册时机错误(比如放在 handler 函数里而非 init() 中)。
修复方式:确认已在 init() 函数中执行 orm.RegisterModel(new(models.User)),且 new() 的参数是结构体指针类型,不是实例。
别写成 orm.RegisterModel(&models.User{}) 或 orm.RegisterModel(models.User{}),否则注册无效。











