Ruby PostgreSQL教程

pro*_*nce 14 ruby postgresql

我正在尝试编写一个与PostgreSQL数据库交互的ruby脚本.我正在尝试从文档中拼凑出如何执行此操作,但是一个很好的教程或示例代码可以创建奇迹以减少使其工作的时间.如果有人有链接,一些提示或有一些他们可以分享的代码,我将非常感激.

编辑,使这个说明更清楚:

注意:这与rails ActiveRecord没有关系,我正在编写一个Ruby脚本,它将参与一个完全独立于Rails的程序.

Kel*_*vin 20

请更具体地说明您正在使用的postgresql库.

除了ActiveRecord之外,我将假设'pg'宝石.

项目源有一个可能有用的html文件.转到https://bitbucket.org/ged/ruby-pg/src/b477174160c8/doc/postgres.html 然后点击html右上角的"raw".在Web浏览器中打开该文件.

此示例代码可帮助您连接(从html文件复制):

require "postgres"
conn = PGconn.connect("localhost", 5432, "", "", "test1")
# or: conn = PGconn.open('dbname=test1')
res = conn.exec("select * from a;")
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一句,那个html文件可能已经过时了.我认为你需要'pg'而不是'postgres'. (3认同)

小智 17

我确认,"postgres"包已经过时,你需要"pg".

我花了很多时间才select * from films开始使用ruby和postgres.我很善良,这是我的代码:

postgres准备(数据库= megatest user = roger pass = 123456 table = 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;
Run Code Online (Sandbox Code Playgroud)

PG包装准备

sudo gem install pg
Run Code Online (Sandbox Code Playgroud)

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"]
}
Run Code Online (Sandbox Code Playgroud)

结果

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
Run Code Online (Sandbox Code Playgroud)


Rya*_*igg 4

您只需要pggem并建立与DB的连接:

require 'pg'
# require 'active_record'  # uncomment for not Rails environment

ActiveRecord::Base.establish_connection(:adapter => "postgresql",
                                        :username => "username",
                                        :password => "password",
                                        :database => "database")
Run Code Online (Sandbox Code Playgroud)

定义要继承的模型时,ActiveRecord::Base它们将使用此数据库连接.其他一切应该像在Rails中一样工作.

  • 为什么这个答案被接受?它没有回答你的问题,你注意到它没有处理Rails或ActiveRecord. (11认同)