2016-08-09 62 views
0

Was sind die Vor- und Nachteile der manuellen Erstellung eines ORM für eine vorhandene Datenbank vs Verwendung von Datenbank-Reflektion?Pro und Contra zum manuellen Erstellen eines ORM für eine vorhandene Datenbank?

Ich schreibe Code mit SQLAlchemy, um auf eine bereits vorhandene Datenbank zuzugreifen. Ich weiß, dass ich sqlalchemy.ext.automap verwenden kann, um das Schema automatisch zu spiegeln und die Zuordnungen zu erstellen.

Allerdings frage ich mich, ob es einen signifikanten Vorteil der manuellen Erstellung der Mapping-Klassen vs lassen die Automap ist es magisch ist.


Bei wesentlichen Vorteil ist, kann sqlalchemy inspectdb die Python-Mapping-Klassen wie Djangos automatisch generieren? Das würde das Erstellen aller deklarativen Basiszuordnungen viel schneller machen, da ich nur überprüfen und optimieren müsste, anstatt von Grund auf neu zu schreiben.

Bearbeiten: Wie @Iuridiniz unten sagt, gibt es ein paar Lösungen, die Django inspectdb imitieren. Siehe Is there a Django's inspectdb equivalent for SQLAlchemy?. Die Antworten in diesem Thread sind nicht Python3-kompatibel. Suchen Sie also in sqlacodegen oder flask-sqlacodegen, wenn Sie nach etwas suchen, das tatsächlich gewartet wird.

+1

Mögliche Duplikate von [Gibt es ein Django-Inspectdb-Äquivalent für SQLAlchemy?] (Http://stackoverflow.com/questions/1794564/is-there-a-djangos-inspectdb-equivalent-for-sqlalchemy) – iuridiniz

+0

Vielen Dank für Ihre Suche Das! Das kümmert sich also um die zweite Hälfte der Frage. Irgendwelche Gedanken zur 1. Hälfte? – dthor

Antwort

0

Ich sehe viele Tabellen, die erstellt wurden mit: CREATE TABLE suppliers AS (SELECT * FROM companies WHERE 1 = 2);, (ein armer Mann Tischkopie), die keine Primärschlüssel haben wird. Wenn vorhandene Tabellen keine Primärschlüssel haben, müssen Sie ständig Ausnahmen abfangen und Column Objekte in den Mapper einspeisen. Wenn Sie Spaltenobjekte zur Hand haben, können Sie bereits Ihre eigene ORM-Ebene erstellen. Wenn Sie nur das ORM abschließen, müssen Sie sich keine Gedanken darüber machen, ob Tabellen Primärschlüssel enthalten.