我正在尝试编写一个与PostgreSQL数据库交互的Ruby脚本。虽然我正在从文档中拼凑如何实现这一点,但是一个好的教程或示例代码将大大缩短获取此功能所需的时间。如果有人有链接、提示或可分享的代码,我将不胜感激。
编辑,使这个注释更清晰:
注意:这与Rails ActiveRecord无关,我正在编写一个Ruby脚本,它将参与一个与Rails完全独立的程序。
我正在尝试编写一个与PostgreSQL数据库交互的Ruby脚本。虽然我正在从文档中拼凑如何实现这一点,但是一个好的教程或示例代码将大大缩短获取此功能所需的时间。如果有人有链接、提示或可分享的代码,我将不胜感激。
编辑,使这个注释更清晰:
注意:这与Rails ActiveRecord无关,我正在编写一个Ruby脚本,它将参与一个与Rails完全独立的程序。
require "postgres"
conn = PGconn.connect("localhost", 5432, "", "", "test1")
# or: conn = PGconn.open('dbname=test1')
res = conn.exec("select * from a;")
res对象是PGResult。向下滚动到HTML中的该部分以查看可以调用哪些方法。
此链接具有PGResult示例:http://rubydoc.info/gems/pg/0.10.0/PGresult
摘录:
require 'pg'
conn = PGconn.open(:dbname => 'test')
res = conn.exec('SELECT 1 AS a, 2 AS b, NULL AS c')
res.getvalue(0,0) # '1'
res[0]['b'] # '2'
res[0]['c'] # nil
我确认,“postgres”包已经过时,你需要使用“pg”。
花费了我很多时间才能让ruby和postgres完成基本的select * from films
操作。作为一个友好的人,这是我的代码:
postgres准备(数据库=megatest 用户=roger 密码=123456 表=films)
$ su postgres
psql
CREATE USER roger WITH PASSWORD '123456';
GRANT ALL PRIVILEGES ON DATABASE megatest to roger;
megatest=# GRANT SELECT ON films TO PUBLIC;
PG包的准备工作
sudo gem install pg
Ruby代码
require 'pg'
conn=PGconn.connect( :hostaddr=>"127.0.0.1", :port=>5432, :dbname=>"megatest", :user=>"roger", :password=>'123456')
# or for a non IP address :host => 'my.host.name.com' instead of hostaddr
# run the query
res = conn.exec("SELECT * FROM films")
# Ran only once in order to get field Name
fieldArray=res.fields()
fieldArray.each do |elem|
print "elem="+elem+"\n"
end
# print data from the query
res.each{ |row|
puts "Code="+row["code"] +" title="+row["title"] +" did="+row["did"] +" date_prod="+row["date_prod"] +" kind="+row["kind"] +" len="+row["len"]
}
结果
root@eblain-VirtualBox:/home/eblain/ruby# ruby postgresTest.rb
Code=UA502 title=Bananas did=105 date_prod=1971-07-13 kind=Comedy len=01:22:00
Code=UA503 title=Cowboy did=105 date_prod=1979-07-13 kind=Horror len=01:32:00
Code=UA544 title=YoBro did=105 date_prod=1981-07-13 kind=Action len=01:42:00
pg
gem并建立与数据库的连接:require 'pg'
# require 'active_record' # uncomment for not Rails environment
ActiveRecord::Base.establish_connection(:adapter => "postgresql",
:username => "username",
:password => "password",
:database => "database")
当你定义模型继承自ActiveRecord::Base
时,它们将使用此数据库连接。其他功能应该与Rails中的工作方式相同。
对于参数化的SQL语句,您应该使用PGconn#exec_params
,例如:
conn = PGconn.new(:dbname => 'test')
conn.exec_params(
'INSERT INTO comedians (first_name, last_name) VALUES ($1, $2)',
['Louis', 'CK'])
conn.close
来源:http://deveiate.org/code/pg/PGconn.html
点击此处查看可以传递给PGconn
构造函数的完整参数列表。