首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rails中没有真正的“准备好的语句”吗?

问rails中没有真正的“准备好的语句”吗?
EN

Stack Overflow用户
提问于 2010-06-21 21:53:03
回答 3查看 2K关注 0票数 3

当我们使用ActiveRecord时,我们可以使用:

代码语言:javascript
复制
User.find(:first, :conditions=>["name=?", name])

看起来ActiveRecord使用的是“准备好的语句”,但仔细查看代码后,我发现ActiveRecord只是使用String.dup和connection.quote()来调整内容来构建一个sql,而不是像Java那样。

那么,raiils中没有真正的prepared statment吗?为什么rails不提供它呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-06-21 23:31:34

如果您所说的准备好的语句是指以编译形式保存的一段SQL,以便更有效地执行,那么您是正确的:它不是在Rails中实现的东西。这有几个原因:

  1. Rails是web框架-它不知道也不关心数据库。默认情况下,Rails使用
    • ActiveRecord进行对象关系映射。如果你愿意,你可以改变它--它不需要是一个even.
    • ActiveRecord不知道特定数据库平台的关系型数据库管理系统。为此,它依赖于“适配器”,这些适配器将AR的需求转换为特定于平台的don't.

。

  • 一些具有AR适配器的RDBMS支持预准备语句(或等效语句),但其他RDBMS支持预准备语句

​

票数 5
EN

Stack Overflow用户

发布于 2013-04-18 02:37:09

Rails 3.1 (或更高版本)支持预准备语句。您进行的每个新查询都将添加到预准备语句池中。如果您正在使用MySql DB,它仍然不支持预准备语句,因为与不使用预准备语句相比,在MySql中使用预准备语句会降低性能。Pat Shaughnessy在这方面发表了一篇很好的文章:Here。

票数 3
EN

Stack Overflow用户

发布于 2010-06-22 00:09:34

在许多(大多数?)方式,数据库视图是一个已准备好的语句。在ActiveRecord中使用视图也很容易。只需在DB中声明视图(我使用rake任务),然后通过ActiveRecord访问它。

适用于对复杂SQL的只读访问。省去了解析/计算SQL所需的许多步骤。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3085222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档