Seite 1 von 1
Welcher ORM erstellt / update auch das Datenbank Schema?
Verfasst: Freitag 18. Juni 2010, 21:03
von Hand
Hallo,
ich will eine Datenbankstruktur in python als Klassen bzw. Dicts abbilden.
Python soll beim Starten dann die DB Struktur anlegen bzw. entsprechend altern.
Gibt es einen ORM der so eine Funktion schon eingebaut hat?
SQLAlchemy z.B. setzt vorraus, dass die DB schon exisitiert.
Re: Welcher ORM erstellt / update auch das Datenbank Schema?
Verfasst: Freitag 18. Juni 2010, 21:25
von Hyperion
Hand hat geschrieben:
SQLAlchemy z.B. setzt vorraus, dass die DB schon exisitiert.
Äh... tut es das? Aber selbst wenn... wieso ist das so "schlimm"?
Re: Welcher ORM erstellt / update auch das Datenbank Schema?
Verfasst: Samstag 19. Juni 2010, 02:39
von DasIch
SQLAlchemy setzt nicht voraus dass die Datenbank existiert, allerdings kann man die Datenbank nicht einfach verändern. Veränderungen lassen sich aber auch nicht mit jedem DBMS machen, zumindest nicht gleich gut.
Re: Welcher ORM erstellt / update auch das Datenbank Schema?
Verfasst: Samstag 19. Juni 2010, 10:25
von sma
South für Django beherrscht Schema-Migration für Djangos ORM.
Ansonsten vielleicht einfach keine relationale DB mit festem Schema nehmen sondern etwas wie MongoDB oder CouchDB, da erübrigt sich dann die Notwendigkeit zur Schema-Migration.
Stefan
Re: Welcher ORM erstellt / update auch das Datenbank Schema?
Verfasst: Samstag 19. Juni 2010, 20:01
von noisefloor
Hallo,
@hand: Du legst die Struktur doch i.d.R. nur 1x an - beim ersten Start. Wenn du dein Skript zum 2x, zum 3x... startest legst du die DB doch nicht neu an, oder?
Je nachdem wie die Struktur aussieht, bietet sich auch ein KV-Store an. Da kannst du den Key nach einem x-beliebigen Schema aufbauen.
Oder wie sma schon sagt was schemaloses.
Gruß, noisefloor
Re: Welcher ORM erstellt / update auch das Datenbank Schema?
Verfasst: Samstag 19. Juni 2010, 20:19
von sma
noisefloor hat geschrieben:Je nachdem wie die Struktur aussieht, bietet sich auch ein KV-Store an.
Stimmt. Redis ist ziemlich cool. Funktioniert allerdings am besten, wenn die Menge der Daten noch in den Hauptspeicher passt. Bei heutigen Rechner häufig kein Problem. Ich finde z.B. ziemlich beachtlich, was für Rechner die Leute z.B. auf der mongodb-ML oder cassandra-ML einzusetzen angeben. 16GB oder 24GB muss da als klein gelten, 8 GB ist winzig.
Stefan
Re: Welcher ORM erstellt / update auch das Datenbank Schema?
Verfasst: Samstag 19. Juni 2010, 20:23
von noisefloor
Hallo,
Stimmt. Redis ist ziemlich cool.
+1. Was ich persönlich wirklich klasse finde ist das Beispiel in der Redis-Doku, wo die die Struktur für einen Twitter-Clone entwickeln. Sehr anschaulich. Da kann man sogar drüber hinweg sehen, dass das Ding später in PHP programmiert wird.
Gruß, noisefloor
Re: Welcher ORM erstellt / update auch das Datenbank Schema?
Verfasst: Samstag 19. Juni 2010, 21:20
von sma
noisefloor hat geschrieben:Was ich persönlich wirklich klasse finde ist das Beispiel in der Redis-Doku, wo die die Struktur für einen Twitter-Clone entwickeln.
Hier →
http://gist.github.com/445239 eine quick'n'dirty-Variante mit Python.
Stefan
Re: Welcher ORM erstellt / update auch das Datenbank Schema?
Verfasst: Samstag 19. Juni 2010, 21:39
von Hand
Die Datenbank wird nachtraeglich erweitert, ausgeliefert wird nur das Programm.
Daher soll sich die DB automatisch an das Programm anpassen.
Re: Welcher ORM erstellt / update auch das Datenbank Schema?
Verfasst: Sonntag 20. Juni 2010, 11:11
von noisefloor
Hallo,
egal wie man es dreht und wendet - IMHO spricht einiges
gegen eine relationale DB. Gründe:
- Bei einer relationalen DB beginnt man üblicherweise mit dem Entwurf der DB, damit nachher auch alles sinnvoll geordnet ist. Geht bei dir aber nicht, weil die eben die Endstruktur nicht kennst.
- Da du die Struktur nicht kennst, musst du bei jedem Programmstart die Struktur erkennen lassen, damit du (das Prog) darauf zugreifen kannst. Die Struktur (dauerhaft) in einem Dict o.ä. zu speichern ist eine schlechte Idee - schließlich weißt du ja nicht, ob der Nutzer die DB zwischendurch nicht händisch (z.B. phpmyadmin bei MySQL) bearbeitet hat. Es gibt zwar für die meisten (alle?) relationalen DBs die entsprechenden Befehle, um alle Tabellen und deren Struktur auszulesen. Ist aber halt aufwendig.
Natürlich kannst du auch in einer relationalen DB diverse Tabellen anlegen, die untereinander keinerlei Beziehung haben. Da sind aber die weiter eben erwähnte dokumentenorientierten DBs oder KV-Stores wesentlich effizienter (weil dafür ausgelegt).
Kannst du vielleicht mal ein Beispiel geben, was den Prog überhaupt macht (machen soll) und was für Tabellen der Nutzer selber anlegen kann (soll / darf)?
Gruß, noisefloor