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.
Welcher ORM erstellt / update auch das Datenbank Schema?
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Äh... tut es das? Aber selbst wenn... wieso ist das so "schlimm"?Hand hat geschrieben: SQLAlchemy z.B. setzt vorraus, dass die DB schon exisitiert.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
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.
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
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
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
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
@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
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.noisefloor hat geschrieben:Je nachdem wie die Struktur aussieht, bietet sich auch ein KV-Store an.
Stefan
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
Gruß, noisefloor
+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.Stimmt. Redis ist ziemlich cool.
Gruß, noisefloor
Hier → http://gist.github.com/445239 eine quick'n'dirty-Variante mit Python.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.
Stefan
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
egal wie man es dreht und wendet - IMHO spricht einiges gegen eine relationale DB. Gründe:
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
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.
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