Учебники Ruby PostgreSQL
Я пытаюсь написать ruby script, который взаимодействует с базой данных PostgreSQL. Я пытаюсь собрать вместе, как это сделать из документации, но хороший учебник или образец кода будут творить чудеса, чтобы уменьшить время, затрачиваемое на это. Если у кого-то есть ссылка, некоторые советы или есть код, который они могли бы поделиться, я был бы очень благодарен.
Изменить, сделайте это примечание более понятным:
Примечание: это не связано с рельсами ActiveRecord, я пишу Ruby script, который будет задействован в программе, полностью независимой от Rails.
Ответы
Ответ 1
Вам понадобится только камень pg
и установить соединение с БД:
require 'pg'
ActiveRecord::Base.establish_connection(:adapter => "postgresql"
:username => "username",
:password => "password",
:database => "database")
Когда вы определяете модели, наследуемые от ActiveRecord::Base
, они будут использовать это соединение с базой данных. Все остальное должно работать так, как в Rails.
Ответ 2
Просьба уточнить, какую библиотеку postgresql вы используете.
Я собираюсь принять жемчужину "pg", кроме ActiveRecord.
У источника проекта есть html файл, который может быть полезен.
Перейдите к https://bitbucket.org/ged/ruby-pg/src/b477174160c8/doc/postgres.html
Затем нажмите "raw" в верхней правой части html. Откройте файл в своем веб-браузере.
Этот пример кода поможет вам подключиться (скопировано из 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:
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
Ответ 3
Я подтверждаю, что пакет 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;
Подготовка пакета 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
Ответ 4
Для параметризованных операторов 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
.