我正在嘗試編寫一個與PostgreSQL數據庫交互的ruby腳本。我試圖拼湊如何從文檔中做到這一點,但一個很好的教程或示例代碼會減少工作的時間。如果任何人有鏈接,一些提示或有一些代碼,他們可以分享我會非常感激。Ruby PostgreSQL教程
編輯,更加明確提出這樣一個字條:
注意:這不是軌道ActiveRecord的,我寫一個Ruby腳本,將參與一個程序,它是從Rails的完全獨立做。
我正在嘗試編寫一個與PostgreSQL數據庫交互的ruby腳本。我試圖拼湊如何從文檔中做到這一點,但一個很好的教程或示例代碼會減少工作的時間。如果任何人有鏈接,一些提示或有一些代碼,他們可以分享我會非常感激。Ruby PostgreSQL教程
編輯,更加明確提出這樣一個字條:
注意:這不是軌道ActiveRecord的,我寫一個Ruby腳本,將參與一個程序,它是從Rails的完全獨立做。
你只需要要求pg
寶石和建立連接到數據庫:
require 'pg'
ActiveRecord::Base.establish_connection(:adapter => "postgresql"
:username => "username",
:password => "password",
:database => "database")
當你定義模型從ActiveRecord::Base
繼承他們將使用這個數據庫連接。其他一切應該像在Rails中那樣工作。
爲什麼這個答案被標記爲接受?它沒有回答你的問題,你注意到它不涉及Rails或ActiveRecord。 – broschb 2013-06-16 06:12:30
他正在編寫一個簡單的ruby腳本,他不想導入整個非相關的框架:/ – 2014-02-09 06:52:40
Active Record對於使用數據庫連接來說非常合適。如果你想要更輕一點的話,你也可以使用Sequel寶石。 AR是我當時所知道的,因此這就是我所推薦的。 – 2014-02-21 09:19:15
請更具體地瞭解您正在使用的postgresql庫。
我打算假設'pg'寶石,除了ActiveRecord。
該項目源文件可能有幫助的HTML文件。 前往https://bitbucket.org/ged/ruby-pg/src/b477174160c8/doc/postgres.html 然後點擊html右上角的「raw」。在您的網絡瀏覽器中打開該文件。
此示例代碼可以幫助您連接(從HTML文件中複製):
require "postgres"
conn = PGconn.connect("localhost", 5432, "", "", "test1")
# or: conn = PGconn.open('dbname=test1')
res = conn.exec("select * from a;")
的資源對象的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
順便說一句,該HTML文件可能已過時。我認爲你需要'pg'而不是'postgres'。 – Kelvin 2011-04-14 06:18:17
我確認 「Postgres的」 包是過時的,你需要 「PG」。
我花了很多時間纔得到一個基本的select * from films
與紅寶石和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"]
}
結果
[email protected]:/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
很難破譯你的答案。你可以修改格式,以便更有用嗎? – 2012-09-27 18:07:21
在mac上的本地postgres灌輸主機名是什麼? – HMLDude 2017-04-15 23:16:43
對於參數化的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
Look here爲可以傳遞給PGconn
構造函數的參數的完整列表。
這不是用鐵軌做的 – providence 2011-04-14 05:23:22
嗯,我覺得大家都有點困惑。我試圖使用我自己的ActiveRecord,而不是在rails。不過,我會很高興看到關於ruby中數據庫連接的任何信息,因爲我經常發現有更好的實現方法。它也將成爲未來讀者的好資源。 – providence 2011-04-14 07:08:23
您可以獨立於Rails使用ActiveRecord,或者像Sequel或DataMapper一樣使用另一個ORM。我更喜歡續集;我建議使用ORM,而不是爲特定的DBM手動編寫SQL。如果將來您需要更改爲不同的數據庫管理器,那麼如果它支持ORM,那麼這對於ORM來說是微不足道的。 – 2012-09-27 18:09:19