Ruby PostgreSQL教程

Ruby PostgreSQL教程,ruby,postgresql,Ruby,Postgresql,我正在尝试编写一个与PostgreSQL数据库交互的ruby脚本。我正试图从文档中拼凑出如何做到这一点,但是一个好的教程或示例代码将非常有助于减少工作时间。如果任何人有一个链接,一些提示或有一些代码可以分享,我将不胜感激 编辑,使此注释更加清晰: 注意:这与rails ActiveRecord无关,我正在编写一个Ruby脚本,它将包含在一个完全独立于rails的程序中 您只需要使用pg gem并建立与DB的连接: require 'pg' # require 'active_record' #

我正在尝试编写一个与PostgreSQL数据库交互的ruby脚本。我正试图从文档中拼凑出如何做到这一点,但是一个好的教程或示例代码将非常有助于减少工作时间。如果任何人有一个链接,一些提示或有一些代码可以分享,我将不胜感激

编辑,使此注释更加清晰:


注意:这与rails ActiveRecord无关,我正在编写一个Ruby脚本,它将包含在一个完全独立于rails的程序中

您只需要使用pg gem并建立与DB的连接:

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中一样工作。

请更具体地说明您使用的是什么postgresql库

我将假设“pg”宝石,除了ActiveRecord

项目源有一个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;")
res对象是PGResult。向下滚动到html中的该部分,查看可以调用哪些方法

此链接有一个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的电影中得到一个基本的选择。由于我很善良,以下是我的代码:

postgres准备数据库=megatest用户=罗杰通行证=123456表格=电影

$ 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

对于参数化SQL语句,应该使用PGconnexec_参数,例如

资料来源:


有关可传递给PGconn构造函数的完整参数列表。

Btw,该html文件可能已过时。我认为您需要使用“pg”而不是“postgres”。为什么ruby和postgresql经常一起工作?有什么原因吗?@stt106如果你问为什么postgresql经常与ruby应用程序一起使用,那只是因为应用程序开发人员选择这样做。我也不相信ruby开发者会更频繁地使用postgresql,比如mysql。如果这不是你的意思,请重新措辞这个问题。这就是我的意思,但我不能重新措辞,因为它不再被允许编辑评论。我确实看到很多公司同时使用ruby和PostgreSQL。嗯,我想每个人都有点困惑。我试着自己使用ActiveRecord,而不是在rails中。不过,我很乐意看到ruby中有关数据库连接的任何信息,因为我经常发现有更好的方法来实现这些功能。对于未来的读者来说,它也是一个很好的资源。您可以将ActiveRecord与Rails分开使用,也可以将另一个ORM用作Sequel或DataMapper。我更喜欢续集;我建议使用ORM,而不是为特定DBM手工编写SQL。如果将来你需要换一个不同的数据库管理器,如果ORM支持的话,那就没什么大不了的了,很难破解你的答案。你能修改格式使它更有用吗?本地postgres在mac上的主机名是什么?为什么这个答案被标记为接受?它没有回答您的问题,您注意到它不处理Rails或ActiveRecord。他正在编写一个简单的ruby脚本,他不想导入整个不相关的框架:/Active Record非常适合处理数据库连接。如果你想要更轻一点的东西,你也可以使用Sequel gem。AR是当时我所知道的,因此这就是我的建议。当我尝试此解决方案时,我得到了以下错误:为数据库适配器指定了“postgresql”,但没有加载gem。将gem“pg”添加到您的gem文件中
conn = PGconn.new(:dbname => 'test')
conn.exec_params(
    'INSERT INTO comedians (first_name, last_name) VALUES ($1, $2)',
    ['Louis', 'CK'])
conn.close