Ist es möglich, deklarative Klassen in SQLAlchemy zu entladen?

8

Ich arbeite an einer Bibliothek, in der der Benutzer einfach einige Klassen deklarieren kann, die automatisch von der Datenbank gesichert werden. Kurz gesagt, irgendwo im Code versteckt, gibt es

%Vor%

und der Benutzer sollte dann tun

%Vor%

In einer statischen Umgebung, z.B. der Benutzer hat eine Datei mit allen persönlichen Klassen erstellt und importiert diese Datei, das funktioniert ziemlich gut. Alle Klassennamen sind festgelegt und SQLAlchemy kann jede Klasse zuordnen.

In einer interaktiven Umgebung sind die Dinge anders: Jetzt besteht die Möglichkeit, dass eine Klasse zweimal definiert wird. Beide Klassen können unterschiedliche Module haben; aber immer noch wird sich SQLAlchemy beschweren:

  

SAWarning: Der Klassenname 'MyStuff' befindet sich bereits in der Registrierung dieser deklarativen Basis, zugeordnet zu & lt; Klasse 'OtherModule.MyStuff' & gt;

Gibt es einen Weg, damit umzugehen? Kann ich eine Klasse aus ihrer declarative_base irgendwie entladen , damit ich ihre Definition durch eine neue ersetzen kann?

    
Debilski 03.03.2011, 19:56
quelle

3 Antworten

2

Sieht so aus, und ich bin mir nicht sicher, ob das überhaupt funktioniert, aber ich denke, was Sie wollen, ist

sqlalchemy.orm.instrumentation.unregister_class()

Ссылка

    
quelle
2

Sie können verwenden:

%Vor%

Die erste Zeile soll die versehentliche Verwendung Ihrer nicht registrierten Klasse verhindern. Der zweite hebt die Registrierung auf und verhindert die Warnung.

    
Gabriel 03.12.2012 08:59
quelle
0

In meinem Projekt verwende ich diese Lösung. Wo Bibliothek angegebene Spalten definiert als Mixin von% Co_de% und Ziel-Mapper erstellt von% Co_de% Aufruf mit Basen, als Ergebnis habe ich volle Funktions-Mapper.

%Vor%     
estin 10.06.2013 13:22
quelle