Daten aus der datenbank holen


#1

Hallo,

ich habe eine klasse Patient. Ich möchte Daten der Patienten aus der
Datenbank
holen.
Ich stelle mir das so vor: Patient(mueller) => ausgewählte Daten (nicht
alle) wie Name, Geburtsdatum und Adresse werden geholt.

Wie kann ich diese Situation in Ruby realisieren?

lg


#2

patient = Patient.find_by_name(‘mueller’)

wenn du das Feld “name” in deiner Tabelle “patients” hast.

Danach kannst du durch entsprechende Methodenaufrufe auf die einzelnen
Daten zugreifen:

patient.name # =>
Müllerpatient.geburtsdatum # => 23.02.2009

usw.

schöne grüße,benjamin

Am 23.02.2009 um 12:31 schrieb Hello G.:


#3

On Mon, 23 Feb 2009 12:31:15 +0100
Hello G. removed_email_address@domain.invalid wrote:

Hallo,

hi,

ich habe eine klasse Patient. Ich möchte Daten der Patienten aus der
Datenbank
holen.
Ich stelle mir das so vor: Patient(mueller) => ausgewählte Daten (nicht
alle) wie Name, Geburtsdatum und Adresse werden geholt.

Wie kann ich diese Situation in Ruby realisieren?

also mit ActiveRecord etwa so:

class Patient < ActiveRecord::Base
composed_of :address_data, :mapping => [ %w(lastname lastname),
%w(geburtsdatum geburtsdatum),
%w(strasse strasse),
%w(stadt stadt)]
end

data = Person.find(:first).address_data
data.strasse

das schafft dir ein ‘subset’ an daten der Patient-class
natuerlich muessen diese attribute auch in der Patient-class vorhanden
sein.

sieh dir das an:
http://api.rubyonrails.org/classes/ActiveRecord/Aggregations/ClassMethods.html

gruesse
rene


#4

2009/2/23 Hello G. removed_email_address@domain.invalid:

danke für eure antworten, aber ich hab mich falsch ausgedrückt.

also die klasse patient befindet sich nicht in der anwendung selber
sondern
ist ein separates programm patient.rb welches zugriff auf die datenbank
haben
soll.

kann ich aus diesem programm patient.rb genauso auf die bestehende
datenbank
zugreifen?

Ja, klar. Hast du das Buch ‘Ruby Cookbook’? Dort ist ein Beispiel, wie
man ActiveRecord auch ohne Rails verwenden kann.

Prinzipiell:

Klasse Patient definieren

zu Datenbank verbinden
Schleife über alle einzulesenden Daten
Alle Attribute in Patient belegen
save aufrufen
bei Datenbank abmelden

-Thomas


Thomas P.
removed_email_address@domain.invalid
http://thopre.googlepages.com/


#5

Thomas P. wrote:

Ja, klar. Hast du das Buch ‘Ruby Cookbook’? Dort ist ein Beispiel, wie
man ActiveRecord auch ohne Rails verwenden kann.

Prinzipiell:

Klasse Patient definieren

zu Datenbank verbinden
Schleife �ber alle einzulesenden Daten
Alle Attribute in Patient belegen
save aufrufen
bei Datenbank abmelden

-Thomas
also das buch habe ich leider nicht.
Klasse patient ist ja schon definiert in Rails in Model patient.rb.

muss ich die verbindung zur datenbank auch noch mal in diesem
separatesprogramm.rb herstellen, obwohl schon eine verbindung zur
datenbank in database.yml vorhanden ist? eigentlich ja oder? oder darf
ich die rails api mit dem separaten program nicht getrennt sehen???

lg


#6

danke für eure antworten, aber ich hab mich falsch ausgedrückt.

also die klasse patient befindet sich nicht in der anwendung selber
sondern
ist ein separates programm patient.rb welches zugriff auf die datenbank
haben
soll.

kann ich aus diesem programm patient.rb genauso auf die bestehende
datenbank
zugreifen?

lg


#7

Hallo ich habe eine ganz andere frage:
ich kann die verbindung zur datenbank erstellen

dbh = Mysql.real_connect("localhost", "arzu", "railswba", "eventserver_development")
aber ich möchte nicht wie hier nach den zeilen fragen und die anzahl
ausgeben lassen,

# Erste Abfrage abfrage1 = dbh.query("SELECT name FROM animal WHERE name = 'tuna'") puts "Number of rows selected: #{dbh.affected_rows}"
sondern ich möchte den inhalt ausgeben lassen, mit welchem befehl kann
ich dies bewerkstellen? gibt es eine seite mit all den befehlen dazu?

[code]

abfrage1 = dbh.query(“SELECT * FROM animal WHERE name = ‘tuna’”)
puts “Number of rows selected: #{dbh.???}” ##ausgabe von category

[code]

lg mykavun


#8

2009/2/24 Hello G. removed_email_address@domain.invalid:

 Alle Attribute in Patient belegen
 save aufrufen
bei Datenbank abmelden

-Thomas
also das buch habe ich leider nicht.

ist aber sehr empfehlenswert, was alle möglichen Themengebiete rund um
Ruby anbelangt.

Klasse patient ist ja schon definiert in Rails in Model patient.rb.

wenn es über ein separates Programm laufen soll, mußt du auch dort
Patient noch definieren.

muss ich die verbindung zur datenbank auch noch mal in diesem
separatesprogramm.rb herstellen, obwohl schon eine verbindung zur
datenbank in database.yml vorhanden ist? eigentlich ja oder? oder darf
ich die rails api mit dem separaten program nicht getrennt sehen???

es läßt sich sicher auch in die Rails-Applikation integrieren, aber
wenn mir von einem separaten Programm ausgehen, mußt du dort auch die
Verbindung zu Datenbank selbst handeln (ist aber auch nicht weiter
schlimm).

Hier ist mal ein Skript von mir, das in etwa das gleiche macht, du
müßtest es halt darauf anpassen, daß der Input nicht von einer
Webseite sondern aus einer Datei kommt.

require ‘rss/2.0’
require ‘open-uri’
require ‘date’

require ‘rubygems’
require ‘active_record’

def activerecord_connect
ActiveRecord::Base.establish_connection(:adapter => “mysql”,
:host => “localhost”,
:username => “root”,
:password => nil,
:database => “jobs”)
end

activerecord_connect

class Posts < ActiveRecord::Base
end

url=‘http://berlin.kijiji.de/f-SearchAdRss?CatId=65
feed = RSS::Parser.parse(open(url).read, false)

puts “=== Channels: #{feed.channel.title} ===”

feed.items.each do |item|
found = Posts.find_by_pubdate(item.pubDate.to_s)
unless found
puts item.title
puts item.pubDate
puts item.description

# TODO: uninteressante immer wieder gepostete
# Angebote generell als uninteressant markieren
if item.title =~ / Franzosen / or
   item.title =~ /MA aus UK\/USA\/Irland /
  interesting = false
else
  interesting = true
end
# Mon, 19 Jan 2009 13:43:55 +0100
# puts Date.strptime(item.pubDate,'')
s = item.pubDate.to_s
d = ParseDate.parsedate(s)
dd = DateTime.new(d[0],d[1],d[2],d[3],d[4],d[5])
pubtime = dd
post = Posts.create(:pubdate => item.pubDate.to_s,
                    :pubtime => pubtime,
                    :title => item.title,
                    :link => item.link,
                    :description => item.description,
                    :interesting => interesting)
puts "gespeichert"

end
end

-Thomas


Thomas P.
removed_email_address@domain.invalid
http://thopre.googlepages.com/


#9

-Thomas


Thomas P.
removed_email_address@domain.invalid
http://thopre.googlepages.com/
http://thopre.wordpress.com/

danke dir für deine hilfsbereitschaft


#10

ich habe eine anfrage gestellt:

a = Patient.find_by_sql(“SELECT ev.name, co.type FROM events AS ev JOIN
competitions AS co ON ev.id = co.event_id”)
a.each do |row|
puts “#{row[0]}\n”
end

als ausgabe bekomme ich 4 leere zeilen (es treffen 4 sätze zu).
mache ich die ausgabe vielleicht falsch, oder wieso wird mir das
ergebnis nicht angezeigt?

habe ich vielleicht etwas vergessen zu definieren?

lg