知识卡片

预处理语句与一次性查询的选择

专业/工作 · 476.a

内容

Go的database/sql提供两条查询路径:Prepare先把SQL语句模板编译成sql.Stmt,之后用不同参数反复执行同一条Stmt,适合会被重复调用的查询;而Exec/QueryRow直接对sql.DB发起一次性查询,不产生可复用的预处理对象,适合只执行一发散:这体现了一个通用原则——”要不要为可复用性付出前期成本”应该由实际使用频率决定,而不是图省事地统一。

参考来源

- 位置:《Go Web编程》第6章《存储数据》(源文件:_epub-src/OEBPS/text00019.html) - 结论依据:原文在该章节围绕“Go的database/sql提供两条查询路径:`Prepare`先把SQL语句模板编译成`sql.Stmt`…”给出定义、示例或限制条件;摘录中的术语、代码片段或对比关系直接支撑本卡片的结论。 - 原始内容:ert into posts (content, author) values ($1, $2) ➥returning id" stmt, err := Db.Prepare(statement) if err != nil { return } defer stmt.Close() err = stmt.QueryRow(post.Co…