【问题标题】:Prepare and execute statements with ActiveRecord using PostgreSQL使用 PostgreSQL 使用 ActiveRecord 准备和执行语句
【发布时间】:2013-10-09 12:47:53
【问题描述】:

我正在尝试使用 ActiveRecord 通过准备好的语句插入值。但是,每次我尝试:

conn = ActiveRecord::Base.connection
conn.prepare "SELECT * from sampletable where id = $1"
conn.execute 3

在第二条语句之后,我得到:

NoMethodError: undefined method `prepare' for
#<ActiveRecord::ConnectionAdapters::PostgreSQLAdapter:0x000001027442c8>

我该怎么办?我正在运行 Rails 3.2.1 和 Ruby 1.9.2

更新:

我解决了这个问题。感谢您的回复,但它不适用于 PostgreSQL。方法是:

stmt = "SELECT * from sampletable where id = $1 and name = $2"
values = [ { value: 1}, { value: "henry" } ]

其中 values 是一个哈希数组,每个指定一个值,$1 绑定到第 0 个哈希,$2 绑定到数组中的第 2 个哈希,依此类推

con = PG::Connection.new(:dbname => "development_DB")
con.prepare("insert", stmt)
con.exec_prepared("insert", values)
con.close()

女士们先生们,这很有效!

【问题讨论】:

标签: ruby-on-rails activerecord insert prepared-statement


【解决方案1】:

从已编辑的问题正文中复制答案,以便从“未回答”过滤器中删除此问题:

我解决了这个问题。感谢您的回复,但它没有工作 PostgreSQL。方法是:

stmt = "SELECT * from sampletable where id = $1 and name = $2"
values = [ { value: 1}, { value: "henry" } ]

其中 values 是一个哈希数组,每个指定一个值,$1 是 绑定到第 0 个散列,$2 绑定到数组中的第 2 个散列,所以 开

con = PG::Connection.new(:dbname => "development_DB")
con.prepare("insert", stmt)
con.exec_prepared("insert", values)
con.close()

女士们先生们,这很有效!

~回答alalani

【讨论】:

  • 与其重新创建新的数据库连接 (con = PG::Connection.new(:dbname =&gt; "development_DB")),我认为最好从适配器获取任何现有连接,如下所示:con = ActiveRecord::Base.connection.raw_connection 但除此之外,它工作得很好!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-27
  • 2020-04-14
  • 2021-08-27
  • 2014-02-05
  • 1970-01-01
相关资源
最近更新 更多