2010-05-06 3 views
5

Ich bin auf der Suche nach einer Möglichkeit, SQLAlchemy ORM-Klassen/-Einträge zu untersuchen, um die Typen und andere Einschränkungen (wie maximale Längen) der Eigenschaften einer Entität zu bestimmen.SQLAlchemy Introspektion von ORM-Klassen/Objekte

Zum Beispiel, wenn ich eine deklarative Klasse:

class User(Base): 
    __tablename__ = "USER_TABLE" 

    id = sa.Column(sa.types.Integer, primary_key=True) 
    fullname = sa.Column(sa.types.String(100)) 
    username = sa.Column(sa.types.String(20), nullable=False) 
    password = sa.Column(sa.types.String(20), nullable=False) 
    created_timestamp = sa.Column(sa.types.DateTime, nullable=False) 

würde ich mag in der Lage sein, um herauszufinden, dass die ‚fullname‘ Feld ein String mit einer maximalen Länge von 100 sein sollte, und ist auf NULL festlegbare . Und das 'created_timestamp' Feld ist eine DateTime und ist nicht Nullable.

Antwort

11

Etwas wie:

table = User.__table__ 
field = table.c["fullname"] 
print "Type", field.type 
print "Length", field.type.length 
print "Nullable", field.nullable 

EDIT:

Neue Klasse Inspektionssystem

Status::

Die kommende Version 0.8 eine New Class Inspection System abgeschlossen ist, muss docs

Viele SQLAlchemy Benutzer schreiben Systeme, die die Fähigkeit benötigen die Attribute einer abgebildeten Klasse, einschließlich in der Lage zu erhalten an den Primärschlüsselspalten, Objektbeziehungen, plain Attribute und so weiter, in der Regel zu inspizieren für Der Zweck des Aufbaus Data-Marshalling-Systeme, wie JSON/XML-Konvertierungsschemata und von Kursformbibliotheken in Hülle und Fülle.

Ursprünglich waren das Tabellen- und Spaltenmodell die ursprüngliche Prüfung Punkte, die ein gut dokumentiertes System haben. Während SQLAlchemy ORM Modelle sind auch vollständig intospectable, dies war noch nie eine stabile und unterstützte Funktion, und die Benutzer neigten dazu, eine klare Idee zu haben, wie Sie an diese Informationen zu bekommen.

0.8 hat einen Plan, um eine konsistente, stabile und vollständig dokumentierte API für diesen Zweck zu erstellen, die ein Inspektionssystem zur Verfügung stellt, das Klassen, Instanzen und möglicherweise auch andere Dinge bearbeitet. Während viele Elemente dieses Systems bereits vorhanden sind, ist der Plan zu sperren Sie die API, einschließlich verschiedener Zugriffsmethoden zur Verfügung von einem solchen Objekte als Mapper, InstanceState und MapperProperty unten:

(folgen Sie dem Link für weitere Informationen)

+0

Ich habe so viel Zeit mit "deklarativen" verbracht, dass ich vergessen habe, die zugrunde liegenden Spalten zu betrachten. Vielen Dank! –