使用ruby pg gem准备好的INSERT语句的示例

时间:2012-05-31 21:14:40

标签: ruby postgresql pg

有些谷歌搜索了大约半天,我找不到任何使用pg gem(postgresql ruby​​ gem)编写的INSERT语句样本。

我试过这个(在查看gem文档之后):

def test2
    conn = PG.connect( dbname: 'db1' )
    conn.prepare("statement1", 'INSERT INTO table1 (id, name, profile) VALUES (?, ?, ?)')
end

但是我收到以下错误:

pgtest.rb:19:in `prepare': ERROR:  syntax error at or near "," (PG::Error)
LINE 1: INSERT INTO table1 (id, name, profile) VALUES (?, ?, ?)
                                                        ^
from pgtest.rb:19:in `test2'
from pgtest.rb:25:in `<main>'

1 个答案:

答案 0 :(得分:29)

pg gem希望您使用带编号的占位符($1$2,...)而不是位置占位符(?):

conn = PG.connect(:dbname => 'db1')
conn.prepare('statement1', 'insert into table1 (id, name, profile) values ($1, $2, $3)')
conn.exec_prepared('statement1', [ 11, 'J.R. "Bob" Dobbs', 'Too much is always better than not enough.' ])

fine manual有这样说:

  

- (PGresult) prepare(stmt_name, sql[, param_types ])
  [...]
  PostgreSQL绑定参数在SQL查询中表示为$ 1,$ 1,$ 2等。

再次exec_prepared

  

PostgreSQL绑定参数在SQL查询中表示为$ 1,$ 1,$ 2等。 params数组的第0个元素绑定到$ 1,第1个元素绑定到$ 2等。