[Django] Datenbank "statisch"?

Django, Flask, Bottle, WSGI, CGI…
Antworten
setech
User
Beiträge: 11
Registriert: Sonntag 23. August 2009, 23:20

Guten Morgen,
nachdem ich nun mein erstes mittelgroßes Projekt fertigstellen konnte mit django, kommen nun noch extra wünsche die einem natürlich erst einfallen wenn die Seite schon Live ist.
Nun muss ich an bereits vorhandenen Datenbanken zb Felder hinzufügen. Sagen wir einfach Ich habe eine Tabelle Artikel diese beinhaltet im Moment (Id, Titel, Text, Autor) nun soll das Konzept noch erweitert werden das ein Artikel einer Kategorie zugeordnet werden soll.
Im Prinzip ja kein Problem, ich erweitere einfach das Model um entsprechendes Feld und update die Seite, jedoch Pustekuchen... ist bereits Content in der Tabelle vorhanden wird die Arbeit der Seite sofort eingestellt... Nun die Frage, wie ist es mir möglich Datenbank Felder hinzuzufügen OHNE sie im Model als optional zu bezeichnen?

ciao setech
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Die Datenbank Struktur im Nachhinein zu ändern ist bisher nicht ohne weiteres Möglich. Das Django "syncdb" Kommando sollte eigentlich ehr "create tables" heißen. Es kann nämlich nix Synchronisieren, sondern erzeugt immer nur Fehlende Tabellen und Indizes.

Generell kommt es auch darauf an, ob die Datenbank es überhaupt unterstützt. z.B. kannst du bei SQLite die Tabellen nur noch umbenennen und das war es.

Siehe auch mal hier: http://www.python-forum.de/topic-10373.html

In PyLucid wurden die Models von v0.8 nach v0.9 komplett geändert. Ich hab es so gemacht: Die alten v0.8 Models habe ich in einer eigenen App verschoben. Die neuen Models existierten also parallel. Eine Update Routine kopierte/konvertierte die Daten dann von den v0.8 nach v0.9 Models.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Mögliche Änderungen muss man am besten von Anfang an einplanen. Schau dir mal http://south.aeracode.org/ an, welches versucht nachzurüsten, was Rails-Entwickler von Tag 1 an hatten.

Andernfalls musst du je nach dem wie weit deine DB das unterstützt, per Hand mit "ALTER TABLE"-Befehlen arbeiten oder aber alles exportieren, die Tabellen löschen, geändert wieder anlegen und die Daten wieder (vorsichtig!) importieren.

Oder am besten gar keine relationale DB mit festem Schema benutzen. Das wäre mein Tipp, aber selbst in einem Projekt eine NOSQL-DB ausprobieren steht immer noch auf meiner TODO-Liste.

Stefan
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

sma hat geschrieben:Oder am besten gar keine relationale DB mit festem Schema benutzen. Das wäre mein Tipp, aber selbst in einem Projekt eine NOSQL-DB ausprobieren steht immer noch auf meiner TODO-Liste.
Ja, dito, aber ohne das ORM ist Django ja auch nichtmal mehr halb so toll.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
SpiritCrusher
User
Beiträge: 13
Registriert: Montag 11. Januar 2010, 13:59
Wohnort: Köln
Kontaktdaten:

Falls du MySQL benutzt, dann ist das eigentlich gar kein Problem. Felder im Model anlegen und einfach en kleines SQL Script schreiben, dass die entsprechenden Felder in die Tabellen einfügt. Ist eigentlich kein größeres Problem...
Antworten