SQLAlchemy 2.0 Dokumentation
SQLAlchemy ORM
- ORM Schnellstart
- ORM Abgebildete Klassenkonfiguration
- Übersicht über ORM-gemappte Klassen
- Klassen mit Deklarativität zuordnen
- Integration mit dataclasses und attrs
- SQL-Ausdrücke als gemappte Attribute
- Ändern des Attributverhaltens
- Zusammengesetzte Spaltentypen
- Abbildung von Klassenhierarchien
- Nicht-traditionelle Zuordnungen
- Konfigurieren eines Versionszählers
- Class Mapping API¶
registryadd_mapped_attribute()column_property()declarative_base()declarative_mixin()as_declarative()mapped_column()declared_attrDeclarativeBaseDeclarativeBaseNoMetahas_inherited_table()synonym_for()object_mapper()class_mapper()configure_mappers()clear_mappers()identity_key()polymorphic_union()orm_insert_sentinel()reconstructor()MapperMapper.__init__()Mapper.add_properties()Mapper.add_property()Mapper.all_orm_descriptorsMapper.attrsMapper.base_mapperMapper.cMapper.cascade_iterator()Mapper.class_Mapper.class_managerMapper.column_attrsMapper.columnsMapper.common_parent()Mapper.compositesMapper.concreteMapper.configuredMapper.entityMapper.get_property()Mapper.get_property_by_column()Mapper.identity_key_from_instance()Mapper.identity_key_from_primary_key()Mapper.identity_key_from_row()Mapper.inheritsMapper.is_mapperMapper.is_sibling()Mapper.isa()Mapper.iterate_propertiesMapper.local_tableMapper.mapped_tableMapper.mapperMapper.non_primaryMapper.persist_selectableMapper.polymorphic_identityMapper.polymorphic_iterator()Mapper.polymorphic_mapMapper.polymorphic_onMapper.primary_keyMapper.primary_key_from_instance()Mapper.primary_mapper()Mapper.relationshipsMapper.selectableMapper.self_and_descendantsMapper.singleMapper.synonymsMapper.tablesMapper.validatorsMapper.with_polymorphic_mappers
MappedAsDataclassMappedClassProtocol
- SQL-Ausdrücke zuordnen
- Beziehungskonfiguration
- ORM Abfragehandbuch
- Verwendung der Sitzung
- Ereignisse und Interna
- ORM Erweiterungen
- ORM Beispiele
Projektversionen
- Vorher: Konfigurieren eines Versionszählers
- Nächste: Mapping von SQL-Ausdrücken
- Nach oben: Startseite
- Auf dieser Seite
- Klassen-Mapping-API
registryadd_mapped_attribute()column_property()declarative_base()declarative_mixin()as_declarative()mapped_column()declared_attrDeclarativeBaseDeclarativeBaseNoMetahas_inherited_table()synonym_for()object_mapper()class_mapper()configure_mappers()clear_mappers()identity_key()polymorphic_union()orm_insert_sentinel()reconstructor()MapperMapper.__init__()Mapper.add_properties()Mapper.add_property()Mapper.all_orm_descriptorsMapper.attrsMapper.base_mapperMapper.cMapper.cascade_iterator()Mapper.class_Mapper.class_managerMapper.column_attrsMapper.columnsMapper.common_parent()Mapper.compositesMapper.concreteMapper.configuredMapper.entityMapper.get_property()Mapper.get_property_by_column()Mapper.identity_key_from_instance()Mapper.identity_key_from_primary_key()Mapper.identity_key_from_row()Mapper.inheritsMapper.is_mapperMapper.is_sibling()Mapper.isa()Mapper.iterate_propertiesMapper.local_tableMapper.mapped_tableMapper.mapperMapper.non_primaryMapper.persist_selectableMapper.polymorphic_identityMapper.polymorphic_iterator()Mapper.polymorphic_mapMapper.polymorphic_onMapper.primary_keyMapper.primary_key_from_instance()Mapper.primary_mapper()Mapper.relationshipsMapper.selectableMapper.self_and_descendantsMapper.singleMapper.synonymsMapper.tablesMapper.validatorsMapper.with_polymorphic_mappers
MappedAsDataclassMappedClassProtocol
Class Mapping API¶
| Objektname | Beschreibung |
|---|---|
add_mapped_attribute(target, key, attr) |
Fügt ein neues zugeordnetes Attribut zu einer ORM-zugeordneten Klasse hinzu. |
as_declarative(**kw) |
Klassendekorator, der eine gegebene Klasse in eine |
class_mapper(class_[, configure]) |
Gibt für eine Klasse den primären |
Entfernt alle Mapper aus allen Klassen. |
|
column_property(column, *additional_columns, [group, deferred, raiseload, comparator_factory, init, repr, default, default_factory, compare, kw_only, hash, active_history, expire_on_flush, info, doc]) |
Stellt eine spaltenbezogene Eigenschaft für die Verwendung mit einem Mapping bereit. |
Initialisiert die Beziehungen zwischen den Makern aller bisher in allen |
|
declarative_base(*, [metadata, mapper, cls, name, class_registry, type_annotation_map, constructor, metaclass]) |
Erstellt eine Basisklasse für deklarative Klassendefinitionen. |
declarative_mixin(cls) |
Markiert eine Klasse als Bereitsteller der Funktion „deklaratives Mixin“. |
Basisklasse für deklarative Klassendefinitionen. |
|
Dasselbe wie |
|
Markiert eine klassenbezogene Methode als Definition einer zugeordneten Eigenschaft oder einer deklarativen Direktive. |
|
has_inherited_table(cls) |
Gibt True zurück, wenn eine der Klassen, von denen die gegebene Klasse erbt, eine zugeordnete Tabelle hat, andernfalls False. |
identity_key([class_, ident], *, [instance, row, identity_token]) |
Erzeugt „Identitätsschlüssel“-Tupel, wie sie als Schlüssel im Wörterbuch |
mapped_column([__name_pos, __type_pos], *args, [init, repr, default, default_factory, compare, kw_only, hash, nullable, primary_key, deferred, deferred_group, deferred_raiseload, use_existing_column, name, type_, autoincrement, doc, key, index, unique, info, onupdate, insert_default, server_default, server_onupdate, active_history, quote, system, comment, sort_order], **kw) |
Deklariert eine neue ORM-zugeordnete |
Mixin-Klasse, die anzeigt, dass beim Mappen dieser Klasse diese auch in eine Dataclass umgewandelt wird. |
|
Ein Protokoll, das eine SQLAlchemy zugeordnete Klasse repräsentiert. |
|
Definiert eine Zuordnung zwischen einer Python-Klasse und einer Datenbanktabelle oder einer anderen relationalen Struktur, damit ORM-Operationen auf der Klasse durchgeführt werden können. |
|
object_mapper(instance) |
Gibt für ein Objekt den primären Mapper zurück, der der Objektinstanz zugeordnet ist. |
orm_insert_sentinel([name, type_], *, [default, omit_from_statements]) |
Bietet eine Ersatz- |
polymorphic_union(table_map, typecolname[, aliasname, cast_nulls]) |
Erstellt eine |
reconstructor(fn) |
Dekoriert eine Methode als „Rekonstruktor“-Hook. |
Allgemeine Registry zum Zuordnen von Klassen. |
|
synonym_for(name[, map_column]) |
Dekorator, der ein |
- class sqlalchemy.orm.registry¶
Allgemeine Registry zum Zuordnen von Klassen.
Die
registrydient als Grundlage für die Pflege einer Sammlung von Mappings und bietet Konfigurations-Hooks, die zum Mappen von Klassen verwendet werden.Die drei allgemeinen Arten von unterstützten Mappings sind Declarative Base, Declarative Decorator und Imperative Mapping. Alle diese Mapping-Stile können austauschbar verwendet werden.
registry.generate_base()gibt eine neue deklarative Basisklasse zurück und ist die zugrunde liegende Implementierung der Funktiondeclarative_base().registry.mapped()bietet einen Klassendekorator, der die deklarative Zuordnung auf eine Klasse ohne die Verwendung einer deklarativen Basisklasse anwendet.registry.map_imperatively()erzeugt einenMapperfür eine Klasse, ohne die Klasse nach deklarativen Klassenattributen zu durchsuchen. Diese Methode eignet sich für den Anwendungsfall, der historisch von der klassischen Mapping-Funktionsqlalchemy.orm.mapper()bereitgestellt wurde, die ab SQLAlchemy 2.0 entfernt ist.
Neu in Version 1.4.
Mitglieder
__init__(), as_declarative_base(), configure(), dispose(), generate_base(), map_declaratively(), map_imperatively(), mapped(), mapped_as_dataclass(), mappers, update_type_annotation_map()
Siehe auch
Übersicht über ORM-zugeordnete Klassen - Überblick über Mapping-Stile für Klassen.
-
method
sqlalchemy.orm.registry.__init__(*, metadata: Optional[MetaData] = None, class_registry: Optional[clsregistry._ClsRegistryType] = None, type_annotation_map: Optional[_TypeAnnotationMapType] = None, constructor: Callable[..., None] = <function _declarative_constructor>)¶ Erstellt eine neue
registry- Parameter:
metadata¶ – Eine optionale
MetaData-Instanz. AlleTable-Objekte, die mit der deklarativen Tabellenzuordnung generiert werden, verwenden dieseMetaData-Sammlung. Wenn dieses Argument auf seinem Standardwert vonNonebelassen wird, wird eine leereMetaData-Sammlung erstellt.constructor¶ – Gibt die Implementierung für die Funktion
__init__einer zugeordneten Klasse an, die keine eigene__init__hat. Standardmäßig eine Implementierung, die **kwargs für deklarierte Felder und Beziehungen einer Instanz zuweist. WennNoneübergeben wird, wird keine __init__ bereitgestellt und die Konstruktion fällt über die normalen Python-Semantiken auf cls.__init__ zurück.class_registry¶ – Ein optionales Wörterbuch, das als Registry von Klassennamen -> zugeordneten Klassen dient, wenn Zeichenkettennamen zum Identifizieren von Klassen innerhalb von
relationship()und anderen verwendet werden. Ermöglicht zwei oder mehr deklarativen Basisklassen, dieselbe Registry von Klassennamen für vereinfachte Beziehungen zwischen Basen zu teilen.type_annotation_map¶ –
ein optionales Wörterbuch von Python-Typen zu SQLAlchemy
TypeEngine-Klassen oder -Instanzen. Das bereitgestellte Wörterbuch aktualisiert die Standardtypzuordnung. Dies wird ausschließlich von der KonstruktionMappedColumnverwendet, um Spaltentypen basierend auf Anmerkungen im TypMappedzu erzeugen.Neu in Version 2.0.
Siehe auch
-
method
sqlalchemy.orm.registry.as_declarative_base(**kw: Any) → Callable[[Type[_T]], Type[_T]]¶ Klassendekorator, der
registry.generate_base()für eine gegebene Basisklasse aufruft.Z. B.
from sqlalchemy.orm import registry mapper_registry = registry() @mapper_registry.as_declarative_base() class Base: @declared_attr def __tablename__(cls): return cls.__name__.lower() id = Column(Integer, primary_key=True) class MyMappedClass(Base): ...
Alle Schlüsselwortargumente, die an
registry.as_declarative_base()übergeben werden, werden anregistry.generate_base()weitergeleitet.
-
method
sqlalchemy.orm.registry.configure(cascade: bool = False) → None¶ Konfiguriert alle bisher unkonfigurierten Mapper in dieser
registry.Der Konfigurationsschritt dient dazu, die
relationship()-Verknüpfungen zwischen zugeordneten Klassen abzugleichen und zu initialisieren, sowie Konfigurationsereignisse aufzurufen, wie z. B.MapperEvents.before_configured()undMapperEvents.after_configured(), die von ORM-Erweiterungen oder benutzerdefinierten Erweiterungshooks verwendet werden können.Wenn ein oder mehrere Mapper in dieser Registry
relationship()-Konstrukte enthalten, die auf zugeordnete Klassen in anderen Registrys verweisen, gilt diese Registry als *abhängig* von diesen Registrys. Um diese abhängigen Registrys automatisch zu konfigurieren, sollte das Flagconfigure.cascadeaufTruegesetzt werden. Andernfalls wird eine Ausnahme ausgelöst, wenn sie nicht konfiguriert sind. Der Grund für dieses Verhalten ist, dass eine Anwendung die Konfiguration von Registrys programmgesteuert aufrufen kann, während sie steuert, ob der Prozess implizit andere Registrys erreicht.Als Alternative zur Ausführung von
registry.configure()kann die ORM-Funktionconfigure_mappers()verwendet werden, um sicherzustellen, dass die Konfiguration für alleregistry-Objekte im Speicher abgeschlossen ist. Dies ist im Allgemeinen einfacher zu verwenden und stammt aus der Zeit vor der Verwendung vonregistry-Objekten. Diese Funktion wirkt sich jedoch auf alle Mappings im gesamten laufenden Python-Prozess aus und kann für eine Anwendung, die viele Registrys für verschiedene Zwecke verwendet, die möglicherweise nicht sofort benötigt werden, speicher- und zeitaufwändiger sein.Siehe auch
Neu ab Version 1.4.0b2.
-
method
sqlalchemy.orm.registry.dispose(cascade: bool = False) → None¶ Entsorgt alle Mapper in dieser
registry.Nach der Ausführung haben alle Klassen, die in dieser Registry zugeordnet wurden, keine Klasseninstrumentierung mehr, die mit ihnen assoziiert ist. Diese Methode ist das pro-
registry-Analogon zur anwendungsweiten Funktionclear_mappers().Wenn diese Registry Mapper enthält, die Abhängigkeiten anderer Registrys sind, typischerweise über
relationship()-Links, dann müssen auch diese Registrys entsorgt werden. Wenn solche Registrys in Bezug auf diese existieren, wird derenregistry.dispose()-Methode ebenfalls aufgerufen, wenn das Flagdispose.cascadeaufTruegesetzt ist; andernfalls wird ein Fehler ausgelöst, wenn diese Registrys nicht bereits entsorgt wurden.Neu ab Version 1.4.0b2.
Siehe auch
-
method
sqlalchemy.orm.registry.generate_base(mapper: ~typing.Callable[[...], ~sqlalchemy.orm.mapper.Mapper[~typing.Any]] | None, cls: ~typing.Type[~typing.Any] = <class 'object'>, name: str = 'Base', metaclass: ~typing.Type[~typing.Any] = <class 'sqlalchemy.orm.decl_api.DeclarativeMeta'>) → Any¶ Generiert eine deklarative Basisklasse.
Klassen, die von der zurückgegebenen Klasse erben, werden automatisch mit deklarativer Zuordnung zugeordnet.
Z. B.
from sqlalchemy.orm import registry mapper_registry = registry() Base = mapper_registry.generate_base() class MyClass(Base): __tablename__ = "my_table" id = Column(Integer, primary_key=True)
Die obige dynamisch generierte Klasse ist äquivalent zum nicht-dynamischen Beispiel unten
from sqlalchemy.orm import registry from sqlalchemy.orm.decl_api import DeclarativeMeta mapper_registry = registry() class Base(metaclass=DeclarativeMeta): __abstract__ = True registry = mapper_registry metadata = mapper_registry.metadata __init__ = mapper_registry.constructor
Geändert in Version 2.0: Beachten Sie, dass die Methode
registry.generate_base()durch die neue KlasseDeclarativeBaseersetzt wird, die eine neue „Basis“-Klasse durch Unterklassenbildung generiert, anstatt den Rückgabewert einer Funktion. Dies ermöglicht einen Ansatz, der mit den PEP 484-Typwerkzeugen kompatibel ist.Die Methode
registry.generate_base()stellt die Implementierung für die Funktiondeclarative_base()bereit, die dieregistryund die Basisklasse auf einmal erstellt.Siehe den Abschnitt Deklarative Zuordnung für Hintergründe und Beispiele.
- Parameter:
mapper¶ – Ein optionaler aufrufbarer Wert, Standard ist
Mapper. Diese Funktion wird verwendet, um neueMapper-Objekte zu generieren.cls¶ – Standard ist
object. Ein Typ, der als Basis für die generierte deklarative Basisklasse verwendet wird. Kann eine Klasse oder ein Tupel von Klassen sein.name¶ – Standard ist
Base. Der Anzeigename für die generierte Klasse. Dies anzupassen ist nicht erforderlich, kann aber die Klarheit in Tracebacks und beim Debugging verbessern.metaclass¶ – Standard ist
DeclarativeMeta. Eine Metaklasse oder eine __metaclass__-kompatible aufrufbare Funktion, die als Metatyp der generierten deklarativen Basisklasse verwendet wird.
-
method
sqlalchemy.orm.registry.map_declaratively(cls: Type[_O]) → Mapper[_O]¶ Ordnet eine Klasse deklarativ zu.
In dieser Zuordnungsform wird die Klasse nach Zuordnungsinformationen durchsucht, einschließlich Spalten, die einer Tabelle zugeordnet werden sollen, und/oder einem tatsächlichen Tabellenobjekt.
Gibt das
Mapper-Objekt zurück.Z. B.
from sqlalchemy.orm import registry mapper_registry = registry() class Foo: __tablename__ = "some_table" id = Column(Integer, primary_key=True) name = Column(String) mapper = mapper_registry.map_declaratively(Foo)
Diese Funktion wird bequemer indirekt entweder über den Klassendekorator
registry.mapped()oder durch Unterklassenbildung einer deklarativen Metaklasse, die ausregistry.generate_base()generiert wurde, aufgerufen.Siehe den Abschnitt Deklarative Zuordnung für vollständige Details und Beispiele.
Siehe auch
registry.mapped()- gebräuchlichere Dekorator-Schnittstelle zu dieser Funktion.
-
method
sqlalchemy.orm.registry.map_imperatively(class_: Type[_O], local_table: FromClause | None = None, **kw: Any) → Mapper[_O]¶ Ordnet eine Klasse imperativ zu.
In dieser Zuordnungsform wird die Klasse nicht nach Zuordnungsinformationen durchsucht. Stattdessen werden alle Zuordnungskonstrukte als Argumente übergeben.
Diese Methode ist vollständig äquivalent zur inzwischen entfernten SQLAlchemy-Funktion
mapper(), außer dass sie sich auf eine bestimmte Registry bezieht.Z. B.
from sqlalchemy.orm import registry mapper_registry = registry() my_table = Table( "my_table", mapper_registry.metadata, Column("id", Integer, primary_key=True), ) class MyClass: pass mapper_registry.map_imperatively(MyClass, my_table)
Siehe den Abschnitt Imperative Zuordnung für vollständige Hintergründe und Anwendungsbeispiele.
- Parameter:
class_¶ – Die zuzuordnende Klasse. Entspricht dem Parameter
Mapper.class_.local_table¶ – die
Tableoder eine andereFromClause, die das Thema der Zuordnung ist. Entspricht dem ParameterMapper.local_table.**kw¶ – Alle anderen Schlüsselwortargumente werden direkt an den Konstruktor von
Mapperübergeben.
-
method
sqlalchemy.orm.registry.mapped(cls: Type[_O]) → Type[_O]¶ Klassendekorator, der den deklarativen Zuordnungsprozess auf eine gegebene Klasse anwendet.
Z. B.
from sqlalchemy.orm import registry mapper_registry = registry() @mapper_registry.mapped class Foo: __tablename__ = "some_table" id = Column(Integer, primary_key=True) name = Column(String)
Siehe den Abschnitt Deklarative Zuordnung für vollständige Details und Beispiele.
- Parameter:
cls¶ – Die zuzuordnende Klasse.
- Gibt zurück:
die übergebene Klasse.
Siehe auch
registry.generate_base()- generiert eine Basisklasse, die die deklarative Zuordnung automatisch über eine Python-Metaklasse auf Unterklassen anwendet.Siehe auch
-
methode
sqlalchemy.orm.registry.mapped_as_dataclass(_registry__cls: Type[_O] | None = None, *, init: _NoArg | bool = _NoArg.NO_ARG, repr: _NoArg | bool = _NoArg.NO_ARG, eq: _NoArg | bool = _NoArg.NO_ARG, order: _NoArg | bool = _NoArg.NO_ARG, unsafe_hash: _NoArg | bool = _NoArg.NO_ARG, match_args: _NoArg | bool = _NoArg.NO_ARG, kw_only: _NoArg | bool = _NoArg.NO_ARG, dataclass_callable: _NoArg | Callable[..., Type[Any]] = _NoArg.NO_ARG) → Type[_O] | Callable[[Type[_O]], Type[_O]]¶ Klassendekorator, der den deklarativen Mapping-Prozess auf eine gegebene Klasse anwendet und die Klasse zusätzlich in eine Python-Datenklasse konvertiert.
Siehe auch
Deklaratives Mapping von Datenklassen - Vollständiger Hintergrund zum nativen Mapping von Datenklassen in SQLAlchemy
Neu in Version 2.0.
-
attribut
sqlalchemy.orm.registry.mappers¶ Schreibgeschützte Sammlung aller
Mapper-Objekte.
-
methode
sqlalchemy.orm.registry.update_type_annotation_map(type_annotation_map: _TypeAnnotationMapType) → None¶ Aktualisiert die
registry.type_annotation_mapmit neuen Werten.
- funktion sqlalchemy.orm.add_mapped_attribute(target: Type[_O], key: str, attr: MapperProperty[Any]) → None¶
Fügt ein neues zugeordnetes Attribut zu einer ORM-zugeordneten Klasse hinzu.
Z. B.
add_mapped_attribute(User, "addresses", relationship(Address))
Dies kann für ORM-Mappings verwendet werden, die keine deklarativen Metaklassen verwenden, die Attribut-Set-Operationen abfangen.
Neu in Version 2.0.
- funktion sqlalchemy.orm.column_property(column: _ORMColumnExprArgument[_T], *additional_columns: _ORMColumnExprArgument[Any], group: str | None = None, deferred: bool = False, raiseload: bool = False, comparator_factory: Type[PropComparator[_T]] | None = None, init: _NoArg | bool = _NoArg.NO_ARG, repr: _NoArg | bool = _NoArg.NO_ARG, default: Any | None = _NoArg.NO_ARG, default_factory: _NoArg | Callable[[], _T] = _NoArg.NO_ARG, compare: _NoArg | bool = _NoArg.NO_ARG, kw_only: _NoArg | bool = _NoArg.NO_ARG, hash: _NoArg | bool | None = _NoArg.NO_ARG, active_history: bool = False, expire_on_flush: bool = True, info: _InfoType | None = None, doc: str | None = None) → MappedSQLExpression[_T]¶
Stellt eine spaltenbezogene Eigenschaft für die Verwendung mit einem Mapping bereit.
Bei deklarativen Mappings wird
column_property()verwendet, um schreibgeschützte SQL-Ausdrücke einer gemappten Klasse zuzuordnen.Bei imperativen Mappings übernimmt
column_property()auch die Zuordnung von Tabellenspalten mit zusätzlichen Funktionen. Bei vollständig deklarativen Mappings sollte das Konstruktmapped_column()für diesen Zweck verwendet werden.Bei deklarativen Datenklassen-Mappings wird
column_property()als **schreibgeschützt** betrachtet und nicht im Konstruktor__init__()der Datenklasse enthalten.Die Funktion
column_property()gibt eine Instanz vonColumnPropertyzurück.Siehe auch
Verwendung von column_property - Allgemeine Verwendung von
column_property()zur Zuordnung von SQL-AusdrückenAnwenden von Lade-, Persistenz- und Mapping-Optionen für imperative Tabellenspalten - Verwendung von
column_property()mit imperativen Tabellenmappings, um einem einfachenColumn-Objekt zusätzliche Optionen hinzuzufügen- Parameter:
*cols¶ – Liste der abzubildenden Spaltenobjekte.
active_history=False¶ – Nur für imperative Tabellenmappings oder Legacy-Deklarativ-Mappings (d.h. die nicht auf
mapped_column()aktualisiert wurden) verwendet, für spaltenbasierte Attribute, die beschreibbar sein sollen; für deklarative Mappings verwenden Siemapped_column()mitmapped_column.active_history. Einzelheiten siehe dort.comparator_factory¶ – Eine Klasse, die von
Comparatorerbt und benutzerdefinierte SQL-Klauselgenerierung für Vergleichsoperationen bereitstellt.group¶ – Ein Gruppenname für diese Eigenschaft, wenn sie als verzögert markiert ist.
deferred¶ – Wenn True, ist die Spalteneigenschaft „verzögert“, d.h. sie wird nicht sofort geladen, sondern erst, wenn auf das Attribut eines Instanz zugegriffen wird. Siehe auch
deferred().doc¶ – Optionaler String, der als Docstring für den klassengebundenen Deskriptor angewendet wird.
expire_on_flush=True¶ – Deaktiviert die Ablauflogik bei Flush. Eine column_property(), die sich auf einen SQL-Ausdruck (und nicht auf eine einzelne tabellengebundene Spalte) bezieht, gilt als „schreibgeschützte“ Eigenschaft; das Befüllen hat keine Auswirkung auf den Zustand der Daten und kann nur den Datenbankzustand zurückgeben. Aus diesem Grund wird der Wert einer column_property() jedes Mal abgelaufen, wenn das übergeordnete Objekt an einem Flush beteiligt ist, d.h. während eines Flushes einen „dirty“-Zustand aufweist. Das Setzen dieses Parameters auf
Falsehat zur Folge, dass nach dem Flush ein vorhandener Wert bestehen bleibt. Beachten Sie jedoch, dass dieSessionmit Standard-Ablauf-Einstellungen nach einemSession.commit()-Aufruf alle Attribute ablaufen lässt.info¶ – Optionales Datenwörterbuch, das in das
MapperProperty.info-Attribut dieses Objekts aufgenommen wird.raiseload¶ –
Wenn True, zeigt an, dass die Spalte einen Fehler auslösen soll, wenn sie nicht verzögert ist, anstatt den Wert zu laden. Dies kann zur Abfragezeit durch Verwendung der Option
deferred()mit raiseload=False geändert werden.Neu in Version 1.4.
init¶ –
Spezifisch für Deklaratives Mapping von Datenklassen, gibt an, ob das zugeordnete Attribut Teil der von der Datenklasse generierten
__init__()-Methode sein soll.Veraltet seit Version 1.4: Der Parameter
column_property.initist fürcolumn_property()veraltet. Dieser Parameter gilt nur für beschreibbare Attribute in einer Konfiguration von Deklarativen Datenklassen, undcolumn_property()wird in diesem Kontext als schreibgeschütztes Attribut behandelt.repr¶ – Spezifisch für Deklaratives Mapping von Datenklassen, gibt an, ob das zugeordnete Attribut Teil der von der Datenklasse generierten
__repr__()-Methode sein soll.default_factory¶ –
Spezifisch für Deklaratives Mapping von Datenklassen, gibt eine Funktion zur Generierung von Standardwerten an, die als Teil der von der Datenklasse generierten
__init__()-Methode ausgeführt wird.Veraltet seit Version 1.4: Der Parameter
column_property.default_factoryist fürcolumn_property()veraltet. Dieser Parameter gilt nur für beschreibbare Attribute in einer Konfiguration von Deklarativen Datenklassen, undcolumn_property()wird in diesem Kontext als schreibgeschütztes Attribut behandelt.compare¶ –
Spezifisch für Deklaratives Mapping von Datenklassen, gibt an, ob dieses Feld bei der Generierung der Methoden
__eq__()und__ne__()für die zugeordnete Klasse in Vergleichsoperationen einbezogen werden soll.Neu ab Version 2.0.0b4.
kw_only¶ –
Spezifisch für Deklaratives Mapping von Datenklassen, gibt an, ob dieses Feld bei der Generierung von
__init__()als nur-Schlüsselwort-Argument gekennzeichnet werden soll.Veraltet seit Version 1.4: Der Parameter
column_property.kw_onlyist fürcolumn_property()veraltet. Dieser Parameter gilt nur für beschreibbare Attribute in einer Konfiguration von Deklarativen Datenklassen, undcolumn_property()wird in diesem Kontext als schreibgeschütztes Attribut behandelt.hash¶ –
Spezifisch für Deklaratives Mapping von Datenklassen, steuert, ob dieses Feld bei der Generierung der
__hash__()-Methode für die zugeordnete Klasse einbezogen wird.Neu in Version 2.0.36.
- funktion sqlalchemy.orm.declarative_base(*, metadata: Optional[MetaData] = None, mapper: Optional[Callable[..., Mapper[Any]]] = None, cls: Type[Any] = <class 'object'>, name: str = 'Base', class_registry: Optional[clsregistry._ClsRegistryType] = None, type_annotation_map: Optional[_TypeAnnotationMapType] = None, constructor: Callable[..., None] = <function _declarative_constructor>, metaclass: Type[Any] = <class 'sqlalchemy.orm.decl_api.DeclarativeMeta'>) → Any¶
Erstellt eine Basisklasse für deklarative Klassendefinitionen.
Die neue Basisklasse erhält eine Metaklasse, die entsprechende
Table-Objekte erstellt und die entsprechendenMapper-Aufrufe basierend auf den deklarativ in der Klasse und ihren Unterklassen bereitgestellten Informationen durchführt.Geändert in Version 2.0: Beachten Sie, dass die Funktion
declarative_base()durch die neue KlasseDeclarativeBaseersetzt wird, die eine neue „Basis“-Klasse durch Vererbung generiert und nicht durch den Rückgabewert einer Funktion. Dies ermöglicht einen Ansatz, der mit den Typisierungswerkzeugen von PEP 484 kompatibel ist.Die Funktion
declarative_base()ist eine Kurzform für die Verwendung der Methoderegistry.generate_base(). Das heißt, das Folgendefrom sqlalchemy.orm import declarative_base Base = declarative_base()
Ist äquivalent zu
from sqlalchemy.orm import registry mapper_registry = registry() Base = mapper_registry.generate_base()
Siehe die Docstring für
registryundregistry.generate_base()für weitere Details.Geändert in Version 1.4: Die Funktion
declarative_base()ist jetzt eine Spezialisierung der allgemeineren Klasseregistry. Die Funktion wird auch vom Paketdeclarative.extin das Paketsqlalchemy.ormverschoben.- Parameter:
metadata¶ – Eine optionale
MetaData-Instanz. Alle durch Unterklassen der Basis implizit deklariertenTable-Objekte teilen sich dieses MetaData. Wenn keines angegeben ist, wird eine MetaData-Instanz erstellt. DieMetaData-Instanz ist über das Attributmetadatader generierten deklarativen Basisklasse verfügbar.mapper¶ – Ein optionaler aufrufbarer, standardmäßig
Mapper. Wird verwendet, um Unterklassen ihren Tabellen zuzuordnen.cls¶ – Standardmäßig
object. Ein Typ, der als Basis für die generierte deklarative Basisklasse verwendet wird. Kann eine Klasse oder ein Tupel von Klassen sein.name¶ – Standardmäßig
Base. Der Anzeigename für die generierte Klasse. Die Anpassung ist nicht erforderlich, kann aber die Klarheit in Tracebacks und beim Debugging verbessern.constructor¶ – Gibt die Implementierung für die Funktion
__init__einer zugeordneten Klasse an, die keine eigene__init__hat. Standardmäßig eine Implementierung, die **kwargs für deklarierte Felder und Beziehungen einer Instanz zuweist. WennNoneübergeben wird, wird keine__init__bereitgestellt und die Konstruktion fällt über normale Python-Semantik aufcls.__init__zurück.class_registry¶ – Ein optionales Dictionary, das als Registrierung von Klassennamen -> zugeordneten Klassen dient, wenn Zeichenkettennamen zur Identifizierung von Klassen innerhalb von
relationship()und anderen verwendet werden. Ermöglicht zwei oder mehr deklarativen Basisklassen, sich dieselbe Registrierung von Klassennamen für vereinfachte Beziehungen zwischen Basen zu teilen.type_annotation_map¶ –
Ein optionales Dictionary von Python-Typen zu SQLAlchemy
TypeEngine-Klassen oder -Instanzen. Dies wird ausschließlich vom KonstruktMappedColumnverwendet, um Spaltentypen basierend auf Annotationen innerhalb des TypsMappedzu erzeugen.Neu in Version 2.0.
Siehe auch
metaclass¶ – Standardmäßig
DeclarativeMeta. Eine Metaklasse oder ein __metaclass__-kompatibler aufrufbarer, der als Metatyp der generierten deklarativen Basisklasse verwendet wird.
Siehe auch
- function sqlalchemy.orm.declarative_mixin(cls: Type[_T]) → Type[_T]¶
Markiert eine Klasse als Bereitsteller der Funktion „deklaratives Mixin“.
Z. B.
from sqlalchemy.orm import declared_attr from sqlalchemy.orm import declarative_mixin @declarative_mixin class MyMixin: @declared_attr def __tablename__(cls): return cls.__name__.lower() __table_args__ = {"mysql_engine": "InnoDB"} __mapper_args__ = {"always_refresh": True} id = Column(Integer, primary_key=True) class MyModel(MyMixin, Base): name = Column(String(1000))
Der Dekorator
declarative_mixin()modifiziert die gegebene Klasse derzeit in keiner Weise; sein aktueller Zweck ist ausschließlich, das Mypy Plugin zu unterstützen, damit es SQLAlchemy-deklarative Mixin-Klassen identifizieren kann, wenn kein anderer Kontext vorhanden ist.Neu in Version 1.4.6.
- function sqlalchemy.orm.as_declarative(**kw: Any) → Callable[[Type[_T]], Type[_T]]¶
Klassendekorator, der eine gegebene Klasse in eine
declarative_base()anpasst.Diese Funktion verwendet die Methode
registry.as_declarative_base(), indem sie zuerst automatisch eineregistryerstellt und dann den Dekorator aufruft.Z. B.
from sqlalchemy.orm import as_declarative @as_declarative() class Base: @declared_attr def __tablename__(cls): return cls.__name__.lower() id = Column(Integer, primary_key=True) class MyMappedClass(Base): ...
Siehe auch
- function sqlalchemy.orm.mapped_column(__name_pos: str | _TypeEngineArgument[Any] | SchemaEventTarget | None = None, __type_pos: _TypeEngineArgument[Any] | SchemaEventTarget | None = None, *args: SchemaEventTarget, init: _NoArg | bool = _NoArg.NO_ARG, repr: _NoArg | bool = _NoArg.NO_ARG, default: Any | None = _NoArg.NO_ARG, default_factory: _NoArg | Callable[[], _T] = _NoArg.NO_ARG, compare: _NoArg | bool = _NoArg.NO_ARG, kw_only: _NoArg | bool = _NoArg.NO_ARG, hash: _NoArg | bool | None = _NoArg.NO_ARG, nullable: bool | Literal[SchemaConst.NULL_UNSPECIFIED] | None = SchemaConst.NULL_UNSPECIFIED, primary_key: bool | None = False, deferred: _NoArg | bool = _NoArg.NO_ARG, deferred_group: str | None = None, deferred_raiseload: bool | None = None, use_existing_column: bool = False, name: str | None = None, type_: _TypeEngineArgument[Any] | None = None, autoincrement: _AutoIncrementType = 'auto', doc: str | None = None, key: str | None = None, index: bool | None = None, unique: bool | None = None, info: _InfoType | None = None, onupdate: Any | None = None, insert_default: Any | None = _NoArg.NO_ARG, server_default: _ServerDefaultArgument | None = None, server_onupdate: _ServerOnUpdateArgument | None = None, active_history: bool = False, quote: bool | None = None, system: bool = False, comment: str | None = None, sort_order: _NoArg | int = _NoArg.NO_ARG, **kw: Any) → MappedColumn[Any]¶
Deklariert eine neue ORM-zugeordnete
Column-Konstruktion für die Verwendung innerhalb der Deklarative Tabelle-Konfiguration.Die Funktion
mapped_column()bietet ein ORM-fähiges und mit Python-Typen kompatibles Konstrukt, das mit deklarativen Zuordnungen verwendet wird, um ein Attribut anzuzeigen, das einer CoreColumn-Objekt zugeordnet ist. Sie bietet dieselbe Funktionalität wie die direkte Zuordnung eines Attributs zu einemColumn-Objekt bei Verwendung von Declarative, insbesondere bei Verwendung der Deklarativen Tabellenkonfiguration.Neu in Version 2.0.
mapped_column()wird normalerweise mit expliziter Typisierung zusammen mit dem AnnotationstypMappedverwendet, wo sie den SQL-Typ und die Nullbarkeit für die Spalte basierend auf dem, was in derMapped-Annotation vorhanden ist, ableiten kann. Sie kann auch ohne Annotationen als direkter Ersatz für die Verwendung vonColumnin Deklarativen Zuordnungen im SQLAlchemy 1.x-Stil verwendet werden.Verwendungsbeispiele für
mapped_column()finden Sie in der Dokumentation unter Deklarative Tabelle mit mapped_column().Siehe auch
Deklarative Tabelle mit mapped_column() - vollständige Dokumentation
ORM Deklarative Modelle - Migrationhinweise für Deklarative Zuordnungen mit Zuordnungen im 1.x-Stil
- Parameter:
__name¶ – Der Zeichenkettenname, der der
Columngegeben wird. Dies ist ein optionales, nur positionelles Argument, das, wenn es vorhanden ist, das erste übergebene positionelle Argument sein muss. Wenn es weggelassen wird, wird der Attributname, demmapped_column()zugeordnet ist, als SQL-Spaltenname verwendet.__type¶ –
TypeEngine-Typ oder -Instanz, die den Datentyp angibt, der derColumnzugeordnet werden soll. Dies ist ein optionales, nur positionelles Argument, das, wenn es vorhanden ist, unmittelbar nach dem Parameter__name, falls ebenfalls vorhanden, oder andernfalls das erste positionelle Argument sein muss. Wenn es weggelassen wird, kann der endgültige Typ der Spalte entweder aus dem annotierten Typ abgeleitet werden oder, wenn einForeignKeyvorhanden ist, aus dem Datentyp der referenzierten Spalte.*args¶ – Zusätzliche positionelle Argumente umfassen Konstrukte wie
ForeignKey,CheckConstraintundIdentity, die an die konstruierteColumnweitergegeben werden.nullable¶ – Optionales bool, ob die Spalte „NULL“ oder „NOT NULL“ sein soll. Wenn weggelassen, wird die Nullbarkeit aus der Typannotation abgeleitet, basierend darauf, ob
typing.Optionalvorhanden ist.nullableist standardmäßigTruefür Nicht-Primärschlüsselspalten undFalsefür Primärschlüsselspalten.primary_key¶ – optionales bool, gibt an, ob die
ColumnTeil des Primärschlüssels der Tabelle ist oder nicht.deferred¶ –
Optionales bool - dieses Schlüsselwortargument wird vom ORM-Deklarationsprozess verbraucht und ist kein Teil der
Columnselbst; stattdessen zeigt es an, dass diese Spalte für das Laden "verzögert" werden soll, als ob sie vondeferred()zugeordnet wäre.deferred_group¶ –
Impliziert
mapped_column.deferredzuTrueund setzt den Parameterdeferred.group.Siehe auch
deferred_raiseload¶ –
Impliziert
mapped_column.deferredzuTrueund setzt den Parameterdeferred.raiseload.use_existing_column¶ –
Wenn True, wird versucht, den angegebenen Spaltennamen auf einer geerbten Superklasse (typischerweise einer einzelnen vererbten Superklasse) zu finden. Wenn vorhanden, wird keine neue Spalte erzeugt, sondern auf die Spalte der Superklasse gemappt, als wäre sie in dieser Klasse weggelassen worden. Dies wird für Mixins verwendet, die neue Spalten zu einer geerbten Superklasse hinzufügen.
Neu ab Version 2.0.0b4.
default¶ –
Wird direkt an den Parameter
Column.defaultübergeben, wenn der Parametermapped_column.insert_defaultnicht vorhanden ist. Wenn er mit Deklarative Dataclass-Abbildung verwendet wird, gibt er zusätzlich einen Standard-Python-Wert an, der auf den Schlüsselwortkonstruktor in der generierten__init__()-Methode angewendet werden soll.Beachten Sie, dass im Falle der Dataclass-Generierung, wenn
mapped_column.insert_defaultnicht vorhanden ist, der Wert vonmapped_column.defaultan **zwei** Stellen verwendet wird, sowohl in der__init__()-Methode als auch im ParameterColumn.default. Obwohl sich dieses Verhalten in einer zukünftigen Version ändern kann, funktioniert es derzeit in der Regel gut. Ein Standardwert vonNonebedeutet, dass dieColumnkeinen Standard-Generator erhält, während ein Wert, der auf einem nicht-NonePython- oder SQL-Ausdruckswert verweist, beim Aufruf von__init__()im Voraus auf das Objekt angewendet wird, was derselbe Wert ist, den die CoreInsert-Konstruktion ohnehin verwenden würde, was zum gleichen Endergebnis führt.Hinweis
Bei Verwendung von Core-Spalten-Standardwerten, die aufrufbare Funktionen sind und von der zugrunde liegenden
Columninterpretiert werden sollen, in Verbindung mit ORM-abgebildeten Dataclasses, insbesondere bei **kontextabhängigen Standardfunktionen**, **muss stattdessen der Parametermapped_column.insert_defaultverwendet werden**. Dies ist notwendig, um die aufrufbare Funktion von der Interpretation als Standardwert auf Dataclass-Ebene zu unterscheiden.insert_default¶ –
Wird direkt an den Parameter
Column.defaultübergeben; überschreibt den Wert vonmapped_column.default, wenn vorhanden.mapped_column.defaultgilt jedoch immer für den Konstruktor-Standardwert für eine Dataclass-Abbildung.sort_order¶ –
Eine ganze Zahl, die angibt, wie diese abgebildete Spalte im Vergleich zu anderen sortiert werden soll, wenn die ORM eine
Tableerstellt. Unter abgebildeten Spalten mit demselben Wert wird die Standardreihenfolge verwendet, wobei zuerst die in der Hauptklasse definierten, dann die in den Superklassen definierten abgebildeten Spalten platziert werden. Standardwert ist 0. Die Sortierung ist aufsteigend.Neu seit Version 2.0.4.
active_history=False¶ –
Wenn
True, zeigt dies an, dass der "vorherige" Wert für ein Skalarattribut geladen werden soll, wenn er ersetzt wird und noch nicht geladen ist. Normalerweise muss die Verfolgung des Verlaufs für einfache Skalarwerte, die keine Primärschlüssel sind, nur den "neuen" Wert kennen, um einen Flush durchzuführen. Dieses Flag ist für Anwendungen verfügbar, dieget_history()oderSession.is_modified()verwenden und auch den "vorherigen" Wert des Attributs kennen müssen.Neu in Version 2.0.10.
init¶ – Spezifisch für die Deklarative Dataclass-Abbildung, gibt an, ob das abgebildete Attribut Teil der von
__init__()generierten Methode sein soll, wie sie vom Dataclass-Prozess erstellt wird.repr¶ – Spezifisch für die Deklarative Dataclass-Abbildung, gibt an, ob das abgebildete Attribut Teil der von
__repr__()generierten Methode sein soll, wie sie vom Dataclass-Prozess erstellt wird.default_factory¶ –
Spezifisch für Deklaratives Mapping von Datenklassen, gibt eine Funktion zur Generierung von Standardwerten an, die als Teil der von der Datenklasse generierten
__init__()-Methode ausgeführt wird.compare¶ –
Spezifisch für Deklaratives Mapping von Datenklassen, gibt an, ob dieses Feld bei der Generierung der Methoden
__eq__()und__ne__()für die zugeordnete Klasse in Vergleichsoperationen einbezogen werden soll.Neu ab Version 2.0.0b4.
kw_only¶ – Spezifisch für die Deklarative Dataclass-Abbildung, gibt an, ob dieses Feld beim Generieren von
__init__()als nur-Schlüsselwort-Argument markiert werden soll.hash¶ –
Spezifisch für Deklaratives Mapping von Datenklassen, steuert, ob dieses Feld bei der Generierung der
__hash__()-Methode für die zugeordnete Klasse einbezogen wird.Neu in Version 2.0.36.
**kw¶ – Alle verbleibenden Schlüsselwortargumente werden an den Konstruktor für die
Columnweitergegeben.
- class sqlalchemy.orm.declared_attr¶
Markiert eine klassenbezogene Methode als Definition einer zugeordneten Eigenschaft oder einer deklarativen Direktive.
declared_attrwird typischerweise als Dekorator auf eine Klassenmethode angewendet und wandelt das Attribut in eine skalarähnliche Eigenschaft um, die von der nicht instanziierten Klasse aus aufgerufen werden kann. Der Deklarative Abbildungsprozess sucht nach diesendeclared_attr-Aufrufbaren, während er Klassen scannt, und geht davon aus, dass jedes mitdeclared_attrmarkierte Attribut eine aufrufbare Funktion ist, die ein für die Deklarative Abbildung oder Tabellenkonfiguration spezifisches Objekt erzeugt.declared_attrist normalerweise auf Mixins anwendbar, um Beziehungen zu definieren, die auf verschiedene Implementierer der Klasse angewendet werden sollen. Es kann auch verwendet werden, um dynamisch generierte Spaltenausdrücke und andere deklarative Attribute zu definieren.Beispiel
class ProvidesUserMixin: "A mixin that adds a 'user' relationship to classes." user_id: Mapped[int] = mapped_column(ForeignKey("user_table.id")) @declared_attr def user(cls) -> Mapped["User"]: return relationship("User")
Bei Verwendung mit deklarativen Direktiven wie
__tablename__kann der Modifikatordeclared_attr.directive()verwendet werden, der PEP 484-Typ-Tools mitteilt, dass die gegebene Methode nicht mitMapped-Attributen arbeitet.class CreateTableName: @declared_attr.directive def __tablename__(cls) -> str: return cls.__name__.lower()
declared_attrkann auch direkt auf abgebildete Klassen angewendet werden, um Attribute zu ermöglichen, die sich beim Verwenden von abgebildeten Vererbungsschemata dynamisch auf Unterklassen konfigurieren. Das Folgende veranschaulichtdeclared_attrzur Erstellung eines dynamischen Schemas zur Generierung des ParametersMapper.polymorphic_identityfür Unterklassen.class Employee(Base): __tablename__ = "employee" id: Mapped[int] = mapped_column(primary_key=True) type: Mapped[str] = mapped_column(String(50)) @declared_attr.directive def __mapper_args__(cls) -> Dict[str, Any]: if cls.__name__ == "Employee": return { "polymorphic_on": cls.type, "polymorphic_identity": "Employee", } else: return {"polymorphic_identity": cls.__name__} class Engineer(Employee): pass
declared_attrunterstützt das Dekorieren von Funktionen, die explizit mit@classmethoddekoriert sind. Dies ist aus Laufzeitperspektive niemals notwendig, kann jedoch zur Unterstützung von PEP 484-Typ-Tools erforderlich sein, die die dekorierte Funktion andernfalls nicht als Klassen-Level-Verhalten für den Parameterclserkennen.class SomethingMixin: x: Mapped[int] y: Mapped[int] @declared_attr @classmethod def x_plus_y(cls) -> Mapped[int]: return column_property(cls.x + cls.y)
Neu in Version 2.0: -
declared_attrkann eine Funktion, die mit@classmethoddekoriert ist, aufnehmen, um die PEP 484-Integration bei Bedarf zu unterstützen.Siehe auch
Zusammensetzen von abgebildeten Hierarchien mit Mixins - Dokumentation zu deklarativen Mixins mit Hintergrundinformationen zu Verwendungsmustern für
declared_attr.Klassensignatur
class
sqlalchemy.orm.declared_attr(sqlalchemy.orm.base._MappedAttribute,sqlalchemy.orm.decl_api._declared_attr_common)-
attribute
sqlalchemy.orm.declared_attr.cascading¶ Markiert ein
declared_attrals kaskadierend.Dies ist ein Modifikator für spezielle Anwendungsfälle, der angibt, dass ein auf Spalten oder MapperProperty basierendes deklariertes Attribut für jede abgebildete Unterklasse in einem abgebildeten Vererbungsszenario unterschiedlich konfiguriert werden soll.
Warnung
Der Modifikator
declared_attr.cascadinghat mehrere EinschränkungenDas Flag gilt **nur** für die Verwendung von
declared_attrauf deklarativen Mixin-Klassen und__abstract__-Klassen; es hat derzeit keine Auswirkung, wenn es direkt auf einer abgebildeten Klasse verwendet wird.Das Flag gilt **nur** für normal benannte Attribute, d. h. nicht für spezielle Unterstrich-Attribute wie
__tablename__. Auf diese Attribute hat es **keine** Auswirkung.Das Flag **lässt derzeit keine weiteren Überschreibungen** in der Klassenhierarchie zu; wenn eine Unterklasse versucht, das Attribut zu überschreiben, wird eine Warnung ausgegeben und das überschriebene Attribut wird übersprungen. Dies ist eine Einschränkung, von der gehofft wird, dass sie irgendwann behoben wird.
Unten erhalten sowohl MyClass als auch MySubClass eine eigene
idColumn-Objektinstanziierung unter dem Attributnamensome_id.class HasIdMixin: @declared_attr.cascading def id(cls) -> Mapped[int]: if has_inherited_table(cls): return mapped_column(ForeignKey("myclass.id"), primary_key=True) else: return mapped_column(Integer, primary_key=True) class MyClass(HasIdMixin, Base): __tablename__ = "myclass" # ... class MySubClass(MyClass): """ """ # ...
Das Verhalten der obigen Konfiguration ist, dass
MySubClasssowohl auf seine eigeneidSpalte als auch auf die vonMyClassunter dem Attributnamensome_idverweist.
-
attribute
sqlalchemy.orm.declared_attr.directive¶ Markiert ein
declared_attrals Dekorator für eine deklarative Direktive wie__tablename__oder__mapper_args__.Der Zweck von
declared_attr.directiveist ausschließlich die Unterstützung von PEP 484-Typ-Tools, indem der dekorierten Funktion ein Rückgabetyp gestattet wird, der **nicht** die generische KlasseMappedverwendet, wie es normalerweise der Fall wäre, wenndeclared_attrfür Spalten und abgebildete Eigenschaften verwendet wird. Zur Laufzeit gibtdeclared_attr.directivedie Klassedeclared_attrunverändert zurück.Z. B.
class CreateTableName: @declared_attr.directive def __tablename__(cls) -> str: return cls.__name__.lower()
Neu in Version 2.0.
-
attribute
- class sqlalchemy.orm.DeclarativeBase¶
Basisklasse für deklarative Klassendefinitionen.
Die Klasse
DeclarativeBaseermöglicht die Erstellung neuer deklarativer Basen auf eine Weise, die mit Typ-Checkern kompatibel ist.from sqlalchemy.orm import DeclarativeBase class Base(DeclarativeBase): pass
Die obige Klasse
Basekann nun als Basis für neue deklarative Abbildungen verwendet werden. Die Oberklasse nutzt die Methode__init_subclass__(), um neue Klassen einzurichten, und es werden keine Metaklassen verwendet.Bei der ersten Verwendung instanziiert die Klasse
DeclarativeBaseeine neueregistry, die mit der Basis verwendet werden soll, vorausgesetzt, es wurde keine explizit bereitgestellt. Die KlasseDeclarativeBaseunterstützt Klassen-Level-Attribute, die als Parameter für die Konstruktion dieser Registrierung dienen; beispielsweise, um eine spezifischeMetaData-Sammlung sowie einen spezifischen Wert fürregistry.type_annotation_mapanzugeben.from typing_extensions import Annotated from sqlalchemy import BigInteger from sqlalchemy import MetaData from sqlalchemy import String from sqlalchemy.orm import DeclarativeBase bigint = Annotated[int, "bigint"] my_metadata = MetaData() class Base(DeclarativeBase): metadata = my_metadata type_annotation_map = { str: String().with_variant(String(255), "mysql", "mariadb"), bigint: BigInteger(), }
Als Klassen-Level-Attribute können spezifiziert werden:
- Parameter:
metadata¶ – optionale
MetaData-Sammlung. Wenn eineregistryautomatisch konstruiert wird, wird dieseMetaData-Sammlung zur Konstruktion verwendet. Andernfalls überschreibt die lokaleMetaData-Sammlung diejenige, die von einer vorhandenenregistryverwendet wird, die über den ParameterDeclarativeBase.registryübergeben wird.type_annotation_map¶ – optionale Typen-Annotationszuordnung, die an die
registryalsregistry.type_annotation_mapübergeben wird.registry¶ – liefert eine bereits existierende
registrydirekt.
Neu in Version 2.0: Hinzugefügt wurde
DeclarativeBase, damit deklarative Basisklassen so konstruiert werden können, dass sie auch von PEP 484-Typ-Checkern erkannt werden. Infolgedessen werdenDeclarativeBaseund andere subclassing-orientierte APIs als Nachfolger früherer "von einer Funktion zurückgegebene Klasse"-APIs angesehen, nämlichdeclarative_base()undregistry.generate_base(), bei denen die zurückgegebene Basisklasse von Typ-Checkern ohne Verwendung von Plugins nicht erkannt werden konnte.__init__ Verhalten
In einer reinen Python-Klasse ist die Basis-`__init__()`-Methode in der Klassenhierarchie
object.__init__(), die keine Argumente akzeptiert. Wenn jedoch die UnterklasseDeclarativeBasezum ersten Mal deklariert wird, erhält die Klasse eine__init__()-Methode, die mit der Konstruktorfunktionregistry.constructorverknüpft ist, falls keine__init__()-Methode bereits vorhanden ist. Dies ist der übliche deklarative Konstruktor, der Schlüsselwortargumente als Attribute auf der Instanz zuweist, vorausgesetzt, diese Attribute sind auf Klassenebene definiert (d.h. sie sind abgebildet oder mit einem Deskriptor verknüpft). Dieser Konstruktor wird **niemals von einer abgebildeten Klasse aufgerufen, ohne explizit über super() aufgerufen zu werden**, da abgebildete Klassen selbst direkt eine__init__()-Methode erhalten, dieregistry.constructoraufruft. Im Standardfall funktioniert dies also unabhängig davon, was die Basis-`__init__()`-Methode tut.Geändert in Version 2.0.1:
DeclarativeBasehat standardmäßig einen Konstruktor, der mitregistry.constructorverknüpft ist, sodass Aufrufe vonsuper().__init__()auf diesen Konstruktor zugreifen können. Zuvor fehlte dieser Standardkonstruktor aufgrund eines Implementierungsfehlers, und der Aufruf vonsuper().__init__()riefobject.__init__()auf.Die Unterklasse
DeclarativeBasekann auch eine explizite__init__()-Methode deklarieren, die die Verwendung der Funktionregistry.constructorauf dieser Ebene ersetzt.class Base(DeclarativeBase): def __init__(self, id=None): self.id = id
Abgebildete Klassen rufen diesen Konstruktor immer noch nicht implizit auf; er ist nur über den Aufruf von
super().__init__()zugänglich.class MyClass(Base): def __init__(self, id=None, name=None): self.name = name super().__init__(id=id)
Beachten Sie, dass dies ein anderes Verhalten ist als das, was Funktionen wie das Legacy
declarative_base()tun würden; die von diesen Funktionen erstellte Basis würde immerregistry.constructorfür__init__()installieren.Mitglieder
__mapper__, __mapper_args__, __table__, __table_args__, __tablename__, metadata, registry
Klassensignatur
class
sqlalchemy.orm.DeclarativeBase(sqlalchemy.inspection.Inspectable)-
attribute
sqlalchemy.orm.DeclarativeBase.__mapper__: ClassVar[Mapper[Any]]¶ Das
Mapper-Objekt, an das eine bestimmte Klasse abgebildet wird.Kann auch über
inspect()bezogen werden, z. B.inspect(klass).
-
attribute
sqlalchemy.orm.DeclarativeBase.__mapper_args__: Any¶ Wörterbuch von Argumenten, die an den Konstruktor von
Mapperübergeben werden.Siehe auch
-
attribute
sqlalchemy.orm.DeclarativeBase.__table__: ClassVar[FromClause]¶ Die
FromClause, der eine bestimmte Unterklasse zugeordnet wird.Dies ist normalerweise eine Instanz von
Table, kann aber auch auf andere Arten vonFromClauseverweisen, wie z.B.Subquery, abhängig davon, wie die Klasse abgebildet wird.Siehe auch
-
attribute
sqlalchemy.orm.DeclarativeBase.__table_args__: Any¶ Ein Wörterbuch oder eine Tupel von Argumenten, die an den Konstruktor von
Tableübergeben werden. Siehe Deklarative Tabellenkonfiguration für Hintergrundinformationen zur spezifischen Struktur dieser Sammlung.Siehe auch
-
attribute
sqlalchemy.orm.DeclarativeBase.__tablename__: Any¶ Name der Zeichenkette, der das generierte
Table-Objekt zugewiesen werden soll, falls nicht direkt überDeclarativeBase.__table__angegeben.Siehe auch
-
attribute
sqlalchemy.orm.DeclarativeBase.metadata: ClassVar[MetaData]¶ Bezieht sich auf die
MetaData-Sammlung, die für neueTable-Objekte verwendet wird.Siehe auch
-
attribute
sqlalchemy.orm.DeclarativeBase.registry: ClassVar[registry]¶ Bezieht sich auf die verwendete
registry, mit der neueMapper-Objekte verknüpft werden.
- class sqlalchemy.orm.DeclarativeBaseNoMeta¶
Dasselbe wie
DeclarativeBase, verwendet aber keine Metaklasse, um neue Attribute abzufangen.Die Basisklasse
DeclarativeBaseNoMetakann verwendet werden, wenn die Verwendung benutzerdefinierter Metaklassen erwünscht ist.Neu in Version 2.0.
Mitglieder
__mapper__, __mapper_args__, __table__, __table_args__, __tablename__, metadata, registry
Klassensignatur
class
sqlalchemy.orm.DeclarativeBaseNoMeta(sqlalchemy.inspection.Inspectable)-
Attribut
sqlalchemy.orm.DeclarativeBaseNoMeta.__mapper__: ClassVar[Mapper[Any]]¶ Das
Mapper-Objekt, an das eine bestimmte Klasse abgebildet wird.Kann auch über
inspect()bezogen werden, z. B.inspect(klass).
-
Attribut
sqlalchemy.orm.DeclarativeBaseNoMeta.__mapper_args__: Any¶ Wörterbuch von Argumenten, die an den Konstruktor von
Mapperübergeben werden.Siehe auch
-
Attribut
sqlalchemy.orm.DeclarativeBaseNoMeta.__table__: FromClause | None¶ Die
FromClause, der eine bestimmte Unterklasse zugeordnet wird.Dies ist normalerweise eine Instanz von
Table, kann aber auch auf andere Arten vonFromClauseverweisen, wie z.B.Subquery, abhängig davon, wie die Klasse abgebildet wird.Siehe auch
-
Attribut
sqlalchemy.orm.DeclarativeBaseNoMeta.__table_args__: Any¶ Ein Wörterbuch oder eine Tupel von Argumenten, die an den Konstruktor von
Tableübergeben werden. Siehe Deklarative Tabellenkonfiguration für Hintergrundinformationen zur spezifischen Struktur dieser Sammlung.Siehe auch
-
Attribut
sqlalchemy.orm.DeclarativeBaseNoMeta.__tablename__: Any¶ Name der Zeichenkette, der das generierte
Table-Objekt zugewiesen werden soll, falls nicht direkt überDeclarativeBase.__table__angegeben.Siehe auch
-
Attribut
sqlalchemy.orm.DeclarativeBaseNoMeta.metadata: ClassVar[MetaData]¶ Bezieht sich auf die
MetaData-Sammlung, die für neueTable-Objekte verwendet wird.Siehe auch
-
Attribut
sqlalchemy.orm.DeclarativeBaseNoMeta.registry: ClassVar[registry]¶ Bezieht sich auf die verwendete
registry, mit der neueMapper-Objekte verknüpft werden.
-
Attribut
- Funktion sqlalchemy.orm.has_inherited_table(cls: Type[_O]) → bool¶
Gibt True zurück, wenn eine der Klassen, von denen die gegebene Klasse erbt, eine zugeordnete Tabelle hat, andernfalls False.
Dies wird in deklarativen Mixins verwendet, um Attribute zu erstellen, die sich für die Basisklasse im Vergleich zu einer Unterklasse einer Vererbungshierarchie unterschiedlich verhalten.
- Funktion sqlalchemy.orm.synonym_for(name: str, map_column: bool = False) → Callable[[Callable[[...], Any]], Synonym[Any]]¶
Dekorator, der ein
synonym()-Attribut in Verbindung mit einem Python-Deskriptor erzeugt.Die dekorierte Funktion wird als Parameter
synonym.descriptoransynonym()übergebenclass MyClass(Base): __tablename__ = "my_table" id = Column(Integer, primary_key=True) _job_status = Column("job_status", String(50)) @synonym_for("job_status") @property def job_status(self): return "Status: %s" % self._job_status
Das Feature Hybrid Properties von SQLAlchemy wird in der Regel Synomymen vorgezogen, da dies ein älteres Feature ist.
Siehe auch
Synonyme - Übersicht über Synonyme
synonym()- die mapper-Level-FunktionVerwendung von Deskriptoren und Hybriden - Die Hybrid-Attribut-Erweiterung bietet einen aktualisierten Ansatz zur flexibleren Erweiterung des Attributverhaltens, als dies mit Synonymen möglich ist.
- Funktion sqlalchemy.orm.object_mapper(instance: _T) → Mapper[_T]¶
Gibt für ein Objekt den primären Mapper zurück, der der Objektinstanz zugeordnet ist.
Löst
sqlalchemy.orm.exc.UnmappedInstanceErroraus, wenn keine Zuordnung konfiguriert ist.Diese Funktion ist über das Inspektionssystem verfügbar als
inspect(instance).mapper
Die Verwendung des Inspektionssystems löst
sqlalchemy.exc.NoInspectionAvailableaus, wenn die Instanz nicht Teil einer Zuordnung ist.
- Funktion sqlalchemy.orm.class_mapper(class_: Type[_O], configure: bool = True) → Mapper[_O]¶
Gibt für eine Klasse den primären
Mapperzurück, der mit dem Schlüssel assoziiert ist.Löst
UnmappedClassErroraus, wenn keine Zuordnung für die gegebene Klasse konfiguriert ist, oderArgumentError, wenn ein Nicht-Klasse-Objekt übergeben wird.Äquivalente Funktionalität ist über die Funktion
inspect()verfügbar alsinspect(some_mapped_class)
Die Verwendung des Inspektionssystems löst
sqlalchemy.exc.NoInspectionAvailableaus, wenn die Klasse nicht zugeordnet ist.
- Funktion sqlalchemy.orm.configure_mappers() → None¶
Initialisiert die Beziehungen zwischen den Makern aller bisher in allen
registry-Sammlungen konstruierten Makern.Der Konfigurationsschritt dient dazu, die
relationship()-Verknüpfungen zwischen zugeordneten Klassen abzugleichen und zu initialisieren, sowie Konfigurationsereignisse aufzurufen, wie z. B.MapperEvents.before_configured()undMapperEvents.after_configured(), die von ORM-Erweiterungen oder benutzerdefinierten Erweiterungshooks verwendet werden können.Die Mapper-Konfiguration wird normalerweise automatisch aufgerufen, wenn Zuordnungen aus einer bestimmten
registryzum ersten Mal verwendet werden, sowie immer dann, wenn Zuordnungen verwendet werden und zusätzliche, noch nicht konfigurierte Mapper erstellt wurden. Der automatische Konfigurationsprozess ist jedoch nur lokal für dieregistry, die den Zielmapper und alle damit verbundenenregistry-Objekte, von denen sie abhängen könnte, umfasst; dies entspricht dem Aufruf der Methoderegistry.configure()für eine bestimmteregistry.Im Gegensatz dazu ruft die Funktion
configure_mappers()den Konfigurationsprozess für alle im Speicher vorhandenenregistry-Objekte auf und kann für Szenarien nützlich sein, in denen viele einzelneregistry-Objekte, die dennoch miteinander verbunden sind, verwendet werden.Geändert in Version 1.4: Ab SQLAlchemy 1.4.0b2 funktioniert diese Funktion pro
registry, findet alle vorhandenenregistry-Objekte und ruft die Methoderegistry.configure()für jedes auf. Die Methoderegistry.configure()kann bevorzugt werden, um die Konfiguration von Mappern auf diejenigen zu beschränken, die einer bestimmtenregistryund/oder einer deklarativen Basisklasse zugeordnet sind.Zeitpunkte, zu denen die automatische Konfiguration aufgerufen wird, sind, wenn eine zugeordnete Klasse in eine Instanz instanziiert wird, sowie wenn ORM-Abfragen mit
Session.query()oderSession.execute()mit einer ORM-aktivierten Anweisung gesendet werden.Der Mapper-Konfigurationsprozess, egal ob aufgerufen durch
configure_mappers()oder ausregistry.configure(), bietet mehrere Ereignishaken, die verwendet werden können, um den Mapper-Konfigurationsschritt zu erweitern. Diese Haken umfassenMapperEvents.before_configured()- wird einmal aufgerufen, bevorconfigure_mappers()oderregistry.configure()irgendeine Arbeit verrichtet; dies kann verwendet werden, um zusätzliche Optionen, Eigenschaften oder verwandte Zuordnungen festzulegen, bevor der Vorgang fortgesetzt wird.MapperEvents.mapper_configured()- wird aufgerufen, wenn jeder einzelneMapperim Prozess konfiguriert wird; beinhaltet den gesamten Mapper-Status außer Backrefs, die von anderen noch zu konfigurierenden Mappern gesetzt wurden.MapperEvents.after_configured()- wird einmal aufgerufen, nachdemconfigure_mappers()oderregistry.configure()abgeschlossen ist; zu diesem Zeitpunkt sind alleMapper-Objekte, die in den Geltungsbereich der Konfigurationsoperation fallen, vollständig konfiguriert. Beachten Sie, dass die aufrufende Anwendung möglicherweise noch andere Zuordnungen hat, die noch nicht erstellt wurden, z. B. wenn sie sich in noch nicht importierten Modulen befinden, und auch Zuordnungen, die noch konfiguriert werden müssen, wenn sie sich in anderenregistry-Sammlungen befinden, die nicht Teil des aktuellen Konfigurationsumfangs sind.
- Funktion sqlalchemy.orm.clear_mappers() → None¶
Entfernt alle Mapper aus allen Klassen.
Geändert in Version 1.4: Diese Funktion findet nun alle
registry-Objekte und ruft die Methoderegistry.dispose()für jedes auf.Diese Funktion entfernt die gesamte Instrumentierung von Klassen und verwirft ihre zugehörigen Mapper. Nach dem Aufruf sind die Klassen entmapped und können später mit neuen Mappern neu zugeordnet werden.
clear_mappers()ist **nicht** für den normalen Gebrauch bestimmt, da es absolut keinen gültigen Verwendungszweck außerhalb sehr spezifischer Testszenarien gibt. Normalerweise sind Mapper permanente strukturelle Komponenten von benutzerdefinierten Klassen und werden nie unabhängig von ihrer Klasse verworfen. Wenn eine zugeordnete Klasse selbst vom Garbage Collector gesammelt wird, wird auch ihr Mapper automatisch verworfen. Daher istclear_mappers()nur für die Verwendung in Testsuiten bestimmt, die dieselben Klassen mit unterschiedlichen Zuordnungen wiederverwenden, was an sich ein extrem seltener Anwendungsfall ist - der einzige solche Anwendungsfall ist in der Tat die eigene Testsuite von SQLAlchemy und möglicherweise die Testsuiten anderer ORM-Erweiterungsbibliotheken, die verschiedene Kombinationen von Mapper-Konstruktionen auf einem festen Satz von Klassen testen möchten.
- Funktion sqlalchemy.orm.util.identity_key(class_: Type[_T] | None = None, ident: Any | Tuple[Any, ...] = None, *, instance: _T | None = None, row: Row[Any] | RowMapping | None = None, identity_token: Any | None = None) → _IdentityKeyType[_T]¶
Erzeugt „Identitätsschlüssel“-Tupel, wie sie als Schlüssel im Wörterbuch
Session.identity_mapverwendet werden.Diese Funktion hat mehrere Aufrufstile
identity_key(class, ident, identity_token=token)Diese Form empfängt eine zugeordnete Klasse und einen Primärschlüssel-Skalar oder ein Tupel als Argument.
Z. B.
>>> identity_key(MyClass, (1, 2)) (<class '__main__.MyClass'>, (1, 2), None)
- param class:
zugeordnete Klasse (muss ein positionelles Argument sein)
- param ident:
Primärschlüssel, kann ein Skalar- oder Tupelargument sein.
- param identity_token:
optionales Identitätstoken
Neu in Version 1.2: identity_token hinzugefügt
identity_key(instance=instance)Diese Form erzeugt den Identitätsschlüssel für eine gegebene Instanz. Die Instanz muss nicht persistent sein, nur ihre Primärschlüsselattribute müssen gefüllt sein (andernfalls enthält der Schlüssel für fehlende Werte
None).Z. B.
>>> instance = MyClass(1, 2) >>> identity_key(instance=instance) (<class '__main__.MyClass'>, (1, 2), None)
In dieser Form wird die gegebene Instanz schließlich durch
Mapper.identity_key_from_instance()ausgeführt, was zur Folge hat, dass eine Datenbankprüfung für die entsprechende Zeile durchgeführt wird, wenn das Objekt abgelaufen ist.- param instance:
Objektinstanz (muss als Schlüsselwortargument übergeben werden)
identity_key(class, row=row, identity_token=token)Diese Form ist ähnlich der Klasse/Tupel-Form, empfängt aber stattdessen eine Datenbankergebniszeile als Objekt
RowoderRowMapping.Z. B.
>>> row = engine.execute(text("select * from table where a=1 and b=2")).first() >>> identity_key(MyClass, row=row) (<class '__main__.MyClass'>, (1, 2), None)
- param class:
zugeordnete Klasse (muss ein positionelles Argument sein)
- param row:
Row-Zeile, die von einemCursorResultzurückgegeben wurde (muss als Schlüsselwortargument übergeben werden)- param identity_token:
optionales Identitätstoken
Neu in Version 1.2: identity_token hinzugefügt
- Funktion sqlalchemy.orm.polymorphic_union(table_map, typecolname, aliasname='p_union', cast_nulls=True)¶
Erstellt eine
UNION-Anweisung, die von einem polymorphen Mapper verwendet wird.Siehe Concrete Table Inheritance für ein Beispiel, wie dies verwendet wird.
- Parameter:
table_map¶ – Zuordnung von polymorphen Identitäten zu
Table-Objekten.typecolname¶ – Zeichenkettenname einer "Diskriminator"-Spalte, die aus der Abfrage abgeleitet wird und die polymorphe Identität für jede Zeile erzeugt. Wenn
None, wird kein polymorpher Diskriminator generiert.cast_nulls¶ – wenn True, werden nicht vorhandene Spalten, die als beschriftete NULLs dargestellt werden, in eine CAST eingefügt. Dies ist ein Legacy-Verhalten, das auf einigen Backends wie Oracle problematisch ist - in diesem Fall kann es auf False gesetzt werden.
- Funktion sqlalchemy.orm.orm_insert_sentinel(name: str | None = None, type_: _TypeEngineArgument[Any] | None = None, *, default: Any | None = None, omit_from_statements: bool = True) → MappedColumn[Any]¶
Bietet eine Ersatz-
mapped_column(), die eine sogenannte Sentinel-Spalte generiert, was effiziente Masseneinfügungen mit deterministischer RETURNING-Sortierung für Tabellen ermöglicht, die anderweitig keine qualifizierenden Primärschlüsselkonfigurationen haben.Die Verwendung von
orm_insert_sentinel()ist analog zur Verwendung desinsert_sentinel()Konstrukts innerhalb eines CoreTableKonstrukts.Die Richtlinien für die Hinzufügung dieses Konstrukts zu einer deklarativen zugeordneten Klasse sind die gleichen wie für das
insert_sentinel()Konstrukt; die Datenbanktabelle selbst muss ebenfalls eine Spalte mit diesem Namen enthalten.Hintergrundinformationen zur Verwendung dieses Objekts finden Sie im Abschnitt Konfiguration von Sentinel-Spalten als Teil des Abschnitts Verhalten "Insert Many Values" für INSERT-Anweisungen.
Neu in Version 2.0.10.
- funktion sqlalchemy.orm.reconstructor(fn)¶
Dekoriert eine Methode als „Rekonstruktor“-Hook.
Bezeichnet eine einzelne Methode als "reconstructor", eine
__init__-ähnliche Methode, die vom ORM aufgerufen wird, nachdem die Instanz aus der Datenbank geladen oder anderweitig wiederhergestellt wurde.Tipp
Der Dekorator
reconstructor()nutzt denInstanceEvents.load()Event-Hook, der direkt verwendet werden kann.Der Reconstructor wird ohne Argumente aufgerufen. Skalare (nicht-kollektionelle) datenbankabgebildete Attribute der Instanz sind innerhalb der Funktion verfügbar. Eagerly-loaded Collections sind im Allgemeinen noch nicht verfügbar und enthalten normalerweise nur das erste Element. ORM-Zustandsänderungen, die an Objekten in diesem Stadium vorgenommen werden, werden nicht für die nächste flush()-Operation aufgezeichnet, daher sollte die Aktivität innerhalb eines Reconstructors konservativ sein.
Siehe auch
- klasse sqlalchemy.orm.Mapper¶
Definiert eine Zuordnung zwischen einer Python-Klasse und einer Datenbanktabelle oder einer anderen relationalen Struktur, damit ORM-Operationen auf der Klasse durchgeführt werden können.
Das
MapperObjekt wird mithilfe von Mapping-Methoden desregistryObjekts instanziiert. Informationen zur Instanziierung neuerMapperObjekte finden Sie unter Übersicht über ORM Mapped Classes.Mitglieder
__init__(), add_properties(), add_property(), all_orm_descriptors, attrs, base_mapper, c, cascade_iterator(), class_, class_manager, column_attrs, columns, common_parent(), composites, concrete, configured, entity, get_property(), get_property_by_column(), identity_key_from_instance(), identity_key_from_primary_key(), identity_key_from_row(), inherits, is_mapper, is_sibling(), isa(), iterate_properties, local_table, mapped_table, mapper, non_primary, persist_selectable, polymorphic_identity, polymorphic_iterator(), polymorphic_map, polymorphic_on, primary_key, primary_key_from_instance(), primary_mapper(), relationships, selectable, self_and_descendants, single, synonyms, tables, validators, with_polymorphic_mappers
Klassensignatur
class
sqlalchemy.orm.Mapper(sqlalchemy.orm.ORMFromClauseRole,sqlalchemy.orm.ORMEntityColumnsClauseRole,sqlalchemy.sql.cache_key.MemoizedHasCacheKey,sqlalchemy.orm.base.InspectionAttr,sqlalchemy.log.Identified,sqlalchemy.inspection.Inspectable,sqlalchemy.event.registry.EventTarget,typing.Generic)-
methode
sqlalchemy.orm.Mapper.__init__(class_: Type[_O], local_table: FromClause | None = None, properties: Mapping[str, MapperProperty[Any]] | None = None, primary_key: Iterable[_ORMColumnExprArgument[Any]] | None = None, non_primary: bool = False, inherits: Mapper[Any] | Type[Any] | None = None, inherit_condition: _ColumnExpressionArgument[bool] | None = None, inherit_foreign_keys: Sequence[_ORMColumnExprArgument[Any]] | None = None, always_refresh: bool = False, version_id_col: _ORMColumnExprArgument[Any] | None = None, version_id_generator: Literal[False] | Callable[[Any], Any] | None = None, polymorphic_on: _ORMColumnExprArgument[Any] | str | MapperProperty[Any] | None = None, _polymorphic_map: Dict[Any, Mapper[Any]] | None = None, polymorphic_identity: Any | None = None, concrete: bool = False, with_polymorphic: _WithPolymorphicArg | None = None, polymorphic_abstract: bool = False, polymorphic_load: Literal['selectin', 'inline'] | None = None, allow_partial_pks: bool = True, batch: bool = True, column_prefix: str | None = None, include_properties: Sequence[str] | None = None, exclude_properties: Sequence[str] | None = None, passive_updates: bool = True, passive_deletes: bool = False, confirm_deleted_rows: bool = True, eager_defaults: Literal[True, False, 'auto'] = 'auto', legacy_is_orphan: bool = False, _compiled_cache_size: int = 100)¶ Direkter Konstruktor für ein neues
MapperObjekt.Der
MapperKonstruktor wird nicht direkt aufgerufen und wird normalerweise über die Verwendung desregistryObjekts über den Deklarativen oder Imperativen Mapping-Stil aufgerufen.Geändert in Version 2.0: Die öffentlich zugängliche Funktion
mapper()wurde entfernt; für eine klassische Mapping-Konfiguration verwenden Sie die Methoderegistry.map_imperatively().Die unten dokumentierten Parameter können entweder an die Methode
registry.map_imperatively()übergeben oder im deklarativen Klassenattribut__mapper_args__übergeben werden, das unter Mapper-Konfigurationsoptionen mit Deklarativ beschrieben wird.- Parameter:
class_¶ – Die zu mappende Klasse. Bei der Verwendung von Deklarativ wird dieses Argument automatisch als die deklarierte Klasse selbst übergeben.
local_table¶ – Die
Tableoder eine andereFromClause(d. h. auswählbar), auf die die Klasse gemappt wird. KannNonesein, wenn dieser Mapper von einem anderen Mapper mit Single-Table-Inheritance erbt. Bei der Verwendung von Deklarativ wird dieses Argument automatisch von der Erweiterung übergeben, basierend auf dem, was über das AttributDeclarativeBase.__table__konfiguriert wurde oder über dieTable, die als Ergebnis des AttributsDeclarativeBase.__tablename__vorhanden ist.polymorphic_abstract¶ –
Gibt an, dass diese Klasse in einer polymorphen Hierarchie gemappt wird, aber nicht direkt instanziiert wird. Die Klasse wird normal gemappt, außer dass sie keine Anforderung für eine
Mapper.polymorphic_identityinnerhalb einer Vererbungshierarchie hat. Die Klasse muss jedoch Teil eines polymorphen Vererbungsschemas sein, dasMapper.polymorphic_onan der Basis verwendet.Neu in Version 2.0.
always_refresh¶ – Wenn True, überschreiben alle Abfrageoperationen für diese zugeordnete Klasse alle Daten innerhalb von Objektinstanzen, die sich bereits in der Sitzung befinden, und löschen alle Änderungen im Speicher mit den Informationen, die aus der Datenbank geladen wurden. Die Verwendung dieses Flags wird dringend abgeraten. Alternativ siehe die Methode
Query.populate_existing().allow_partial_pks¶ –
Standardmäßig True. Gibt an, dass ein zusammengesetzter Primärschlüssel mit einigen NULL-Werten als möglicherweise in der Datenbank vorhanden betrachtet werden soll. Dies beeinflusst, ob ein Mapper eine eingehende Zeile einer vorhandenen Identität zuordnet und ob
Session.merge()zuerst in der Datenbank nach einem bestimmten Primärschlüsselwert sucht. Ein "partieller Primärschlüssel" kann auftreten, wenn beispielsweise auf einen OUTER JOIN gemappt wurde.Der Parameter
Mapper.allow_partial_pksgibt auch dem ORM-Relationship-Lazy-Loader an, ob beim Laden eines Many-to-One-verwandten Objekts ein zusammengesetzter Primärschlüssel mit partiellen NULL-Werten dazu führen soll, dass ein Ladeversuch aus der Datenbank unternommen wird, oder ob kein Ladeversuch erforderlich ist.Neu in Version 2.0.36:
Mapper.allow_partial_pkswird von der Relationship-Lazy-Loader-Strategie berücksichtigt, so dass bei Einstellung auf False kein SELECT für einen zusammengesetzten Primärschlüssel mit partiellen NULL-Werten emittiert wird.batch¶ – Standardmäßig
True, was angibt, dass Speicheroperationen mehrerer Entitäten zur Effizienz zusammengefasst werden können. Die Einstellung auf False bedeutet, dass eine Instanz vollständig gespeichert wird, bevor die nächste Instanz gespeichert wird. Dies wird in dem extrem seltenen Fall verwendet, dass einMapperEventsListener zwischen einzelnen Zeilenpersistenzoperationen aufgerufen werden muss.column_prefix¶ –
Eine Zeichenkette, die dem Namen des zugeordneten Attributs vorangestellt wird, wenn
ColumnObjekte automatisch als Attribute der zugeordneten Klasse zugewiesen werden. Hat keinen Einfluss aufColumnObjekte, die explizit imMapper.propertiesWörterbuch zugeordnet sind.Dieser Parameter ist typischerweise nützlich bei imperativen Mappings, die das
TableObjekt separat halten. Unten wird angenommen, dass dasuser_tableTableObjekt die Spaltenuser_id,user_nameundpasswordhat.class User(Base): __table__ = user_table __mapper_args__ = {"column_prefix": "_"}
Das obige Mapping weist die Spalten
user_id,user_nameundpasswordden Attributen_user_id,_user_nameund_passwordder zugeordnetenUser-Klasse zu.Der Parameter
Mapper.column_prefixist im modernen Gebrauch eher unüblich. Für die Handhabung von reflektierten Tabellen ist ein flexiblerer Ansatz zur Automatisierung eines Benennungsschemas das Abfangen derColumnObjekte, während sie reflektiert werden; siehe den Abschnitt Automatisierung von Spaltenbenennungsschemata aus reflektierten Tabellen für Hinweise zu diesem Nutzungsmuster.concrete¶ –
Wenn True, zeigt dies an, dass dieser Mapper Concrete-Table-Inheritance mit seinem übergeordneten Mapper verwenden soll.
Siehe den Abschnitt Concrete Table Inheritance für ein Beispiel.
confirm_deleted_rows¶ – Standardmäßig True; wenn ein DELETE von einer oder mehreren Zeilen basierend auf bestimmten Primärschlüsseln auftritt, wird eine Warnung ausgegeben, wenn die Anzahl der übereinstimmenden Zeilen nicht der erwarteten Anzahl von Zeilen entspricht. Dieser Parameter kann auf False gesetzt werden, um den Fall zu behandeln, in dem Datenbank-ON-DELETE-CASCADE-Regeln einige dieser Zeilen automatisch löschen. Die Warnung kann in einer zukünftigen Version in eine Ausnahme geändert werden.
eager_defaults¶ –
Wenn True, ruft das ORM den Wert serverseitig generierter Standardwerte sofort nach einem INSERT oder UPDATE ab, anstatt sie als abgelaufen zu belassen, um sie beim nächsten Zugriff abzurufen. Dies kann für Event-Schemata verwendet werden, bei denen die serverseitig generierten Werte unmittelbar vor Abschluss des Flush benötigt werden.
Das Abrufen der Werte erfolgt entweder durch Verwendung von
RETURNINGinline mit derINSERToderUPDATEAnweisung oder durch Hinzufügen einer zusätzlichenSELECTAnweisung nach demINSERToderUPDATE, wenn das BackendRETURNINGnicht unterstützt.Die Verwendung von
RETURNINGist besonders performant fürINSERT-Anweisungen, bei denen SQLAlchemy insertmanyvalues nutzen kann, während die Verwendung eines zusätzlichenSELECTrelativ leistungsschwach ist und zusätzliche SQL-Round-Trips hinzufügt, die unnötig wären, wenn auf diese neuen Attribute ohnehin nicht zugegriffen werden soll.Aus diesem Grund ist
Mapper.eager_defaultsstandardmäßig auf den Zeichenkettenwert"auto"gesetzt. Dies bedeutet, dass Server-Standardwerte für INSERT mittelsRETURNINGabgerufen werden sollen, sofern die zugrunde liegende Datenbank dies unterstützt und der verwendete Dialekt "insertmanyreturning" für eine INSERT-Anweisung unterstützt. Wenn die zugrunde liegende DatenbankRETURNINGnicht unterstützt oder "insertmanyreturning" nicht verfügbar ist, werden die Server-Standardwerte nicht abgerufen.Geändert in Version 2.0.0rc1: Option "auto" für
Mapper.eager_defaultshinzugefügt.Siehe auch
Geändert in Version 2.0.0: RETURNING funktioniert jetzt mit mehreren gleichzeitig eingefügten Zeilen über die Funktion insertmanyvalues, was unter anderem die
Mapper.eager_defaults-Funktion auf unterstützenden Backends sehr performant macht.exclude_properties¶ –
Eine Liste oder Menge von Zeichenketten-Spaltennamen, die von der Abbildung ausgeschlossen werden sollen.
include_properties¶ –
Eine inklusive Liste oder Menge von Zeichenketten-Spaltennamen, die abgebildet werden sollen.
inherits¶ –
Eine abgebildete Klasse oder der entsprechende
Mappereiner solchen, die auf eine Oberklasse hinweist, von der dieserMapper*erben* soll. Die hier abgebildete Klasse muss eine Unterklasse der Klasse des anderen Mappers sein. Bei Verwendung von Declarative wird dieses Argument automatisch als Ergebnis der natürlichen Klassenhierarchie der deklarierten Klassen übergeben.Siehe auch
inherit_condition¶ – Bei Joined-Table-Vererbung ein SQL-Ausdruck, der festlegt, wie die beiden Tabellen verbunden werden; standardmäßig eine natürliche Verbindung zwischen den beiden Tabellen.
inherit_foreign_keys¶ – Wenn
inherit_conditionverwendet wird und den vorhandenen Spalten eineForeignKey-Konfiguration fehlt, kann dieser Parameter verwendet werden, um anzugeben, welche Spalten "fremd" sind. In den meisten Fällen kann dies alsNonebelassen werden.legacy_is_orphan¶ –
Boolean, standardmäßig
False. WennTrue, wird angegeben, dass die "Legacy"-Waisenkind-Betrachtung auf von diesem Mapper abgebildete Objekte angewendet wird. Das bedeutet, dass ein ausstehendes (d. h. nicht persistentes) Objekt nur dann automatisch aus einer besitzendenSessionentfernt wird, wenn es von *allen* Eltern abgetrennt wurde, die einedelete-orphan-Kaskade für diesen Mapper angeben. Das neue Standardverhalten ist, dass das Objekt automatisch entfernt wird, wenn es von *einem beliebigen* seiner Eltern abgetrennt wird, die einedelete-orphan-Kaskade angeben. Dieses Verhalten ist konsistenter mit dem eines persistenten Objekts und ermöglicht konsistentes Verhalten in mehr Szenarien, unabhängig davon, ob ein Waisenkind-Objekt bereits geleert wurde oder nicht.Weitere Details zu dieser Änderung finden Sie in der Änderungsnotiz und im Beispiel unter Die Betrachtung eines „ausstehenden“ Objekts als „Waisenkind“ wurde aggressiver gestaltet.
non_primary¶ –
Gibt an, dass dieser
Mapperzusätzlich zum "primären" Mapper, d. h. dem für die Persistenz verwendeten, existiert. Der hier erstellteMapperkann für die Ad-hoc-Abbildung der Klasse auf eine alternative auswählbare Einheit, nur zum Lesen, verwendet werden.Seit Version 1.3 veraltet: Der Parameter
mapper.non_primaryist veraltet und wird in einer zukünftigen Version entfernt. Die Funktionalität von nicht-primären Mappern wird jetzt besser durch dieAliasedClass-Konstruktion abgedeckt, die in 1.3 auch als Ziel einerrelationship()verwendet werden kann.Siehe auch
Beziehung zu AliasedClass - das neue Muster, das die Notwendigkeit des
Mapper.non_primary-Flags überflüssig macht.passive_deletes¶ –
Gibt das DELETE-Verhalten von Fremdschlüsselspalten an, wenn eine Joined-Table-Inheritance-Entität gelöscht wird. Standardmäßig
Falsefür einen Basis-Mapper; für einen erbenden Mapper standardmäßigFalse, es sei denn, der Wert wird auf dem Oberklassen-Mapper aufTruegesetzt.Wenn
True, wird angenommen, dass ON DELETE CASCADE für die Fremdschlüsselbeziehungen konfiguriert ist, die die Tabelle dieses Mappers mit seiner Oberklassentabelle verbinden. Daher muss die Einheit der Arbeit beim Löschen der Entität nur eine DELETE-Anweisung für die Oberklassentabelle und nicht für diese Tabelle ausgeben.Wenn
False, wird eine DELETE-Anweisung individuell für die Tabelle dieses Mappers ausgegeben. Wenn die primären Schlüsselattribute, die lokal zu dieser Tabelle gehören, entladen sind, muss ein SELECT ausgegeben werden, um diese Attribute zu validieren; beachten Sie, dass die primären Schlüsselspalten einer Joined-Table-Unterklasse nicht Teil des "Primärschlüssels" des gesamten Objekts sind.Beachten Sie, dass ein Wert von
True**immer** auf die Unterklassen-Mapper erzwungen wird; das heißt, es ist für eine Oberklasse nicht möglich, passive_deletes anzugeben, ohne dass dies für alle Unterklassen-Mapper wirksam wird.Siehe auch
Verwendung von Fremdschlüssel-ON-DELETE-Kaskade mit ORM-Beziehungen - Beschreibung einer ähnlichen Funktion wie bei
relationship()mapper.passive_updates- Unterstützung für ON UPDATE CASCADE für Joined-Table-Inheritance-Mapperpassive_updates¶ –
Gibt das UPDATE-Verhalten von Fremdschlüsselspalten an, wenn sich eine Primärschlüsselspalte in einer Joined-Table-Inheritance-Abbildung ändert. Standardmäßig
True.Wenn True, wird angenommen, dass ON UPDATE CASCADE für den Fremdschlüssel in der Datenbank konfiguriert ist und die Datenbank die Weitergabe eines UPDATES von einer Quellspalte an abhängige Spalten in Joined-Table-Zeilen handhabt.
Wenn False, wird angenommen, dass die Datenbank keine referentielle Integrität erzwingt und keine eigene CASCADE-Operation für ein Update ausgibt. Der Unit-of-Work-Prozess gibt bei einer Änderung des Primärschlüssels eine UPDATE-Anweisung für die abhängigen Spalten aus.
Siehe auch
Mutable Primary Keys / Update Cascades - Beschreibung einer ähnlichen Funktion wie bei
relationship()mapper.passive_deletes- Unterstützung für ON DELETE CASCADE für Joined-Table-Inheritance-Mapperpolymorphic_load¶ –
Gibt das "polymorphe Ladeverhalten" für eine Unterklasse in einer Vererbungshierarchie an (nur Joined- und Single-Table-Vererbung). Gültige Werte sind:
„‘inline‘“ - gibt an, dass diese Klasse Teil der "with_polymorphic"-Mapper sein soll, d. h. ihre Spalten werden in eine SELECT-Abfrage gegen die Basis aufgenommen.
„‘selectin‘“ - gibt an, dass beim Laden von Instanzen dieser Klasse eine zusätzliche SELECT-Abfrage ausgeführt wird, um die spezifischen Spalten dieser Unterklasse abzurufen. Die SELECT-Abfrage verwendet IN, um mehrere Unterklassen gleichzeitig abzurufen.
Neu seit Version 1.2.
polymorphic_on¶ –
Gibt die Spalte, das Attribut oder den SQL-Ausdruck an, der verwendet wird, um die Zielklasse für eine eingehende Zeile zu bestimmen, wenn erbende Klassen vorhanden sind.
Kann als Zeichenketten-Attributname oder als SQL-Ausdruck wie eine
Columnoder in einer Declarative-Abbildung einmapped_column()-Objekt angegeben werden. Es wird typischerweise erwartet, dass der SQL-Ausdruck einer Spalte in der Basis-am-weitesten-abgebildetenTableentspricht.class Employee(Base): __tablename__ = "employee" id: Mapped[int] = mapped_column(primary_key=True) discriminator: Mapped[str] = mapped_column(String(50)) __mapper_args__ = { "polymorphic_on": discriminator, "polymorphic_identity": "employee", }
Es kann auch als SQL-Ausdruck angegeben werden, wie in diesem Beispiel, wo wir die
case()-Konstruktion verwenden, um einen bedingten Ansatz zu bieten.class Employee(Base): __tablename__ = "employee" id: Mapped[int] = mapped_column(primary_key=True) discriminator: Mapped[str] = mapped_column(String(50)) __mapper_args__ = { "polymorphic_on": case( (discriminator == "EN", "engineer"), (discriminator == "MA", "manager"), else_="employee", ), "polymorphic_identity": "employee", }
Es kann sich auch auf ein beliebiges Attribut über seinen Zeichenkettennamen beziehen, was besonders nützlich ist, wenn annotierte Spaltenkonfigurationen verwendet werden.
class Employee(Base): __tablename__ = "employee" id: Mapped[int] = mapped_column(primary_key=True) discriminator: Mapped[str] __mapper_args__ = { "polymorphic_on": "discriminator", "polymorphic_identity": "employee", }
Wenn
polymorphic_onso gesetzt wird, dass es auf ein Attribut oder einen Ausdruck verweist, der nicht in der lokal abgebildetenTablevorhanden ist, aber der Wert des Diskriminators in der Datenbank gespeichert werden soll, wird der Wert des Diskriminators nicht automatisch auf neue Instanzen gesetzt; dies muss vom Benutzer gehandhabt werden, entweder manuell oder über Event-Listener. Ein typischer Ansatz zur Einrichtung eines solchen Listeners sieht wie folgt aus:from sqlalchemy import event from sqlalchemy.orm import object_mapper @event.listens_for(Employee, "init", propagate=True) def set_identity(instance, *arg, **kw): mapper = object_mapper(instance) instance.discriminator = mapper.polymorphic_identity
Wo oben der Wert von
polymorphic_identityfür die abgebildete Klasse dem Attributdiscriminatorzugewiesen wird, wodurch der Wert in diediscriminator-Spalte in der Datenbank geschrieben wird.Warnung
Derzeit darf **nur eine Diskriminatorspalte gesetzt werden**, typischerweise auf der Basis-am-weitesten-Klasse in der Hierarchie. "Kaskadierende" polymorphe Spalten werden noch nicht unterstützt.
Siehe auch
polymorphic_identity¶ –
Gibt den Wert an, der diese spezielle Klasse als von dem Spaltenausdruck zurückgegeben identifiziert, auf den durch die
Mapper.polymorphic_on-Einstellung verwiesen wird. Wenn Zeilen empfangen werden, wird der Wert, der dem SpaltenausdruckMapper.polymorphic_onentspricht, mit diesem Wert verglichen, was angibt, welche Unterklasse für das neu rekonstruierte Objekt verwendet werden soll.Siehe auch
properties¶ –
Ein Wörterbuch, das die Zeichenkettennamen von Objektattributen auf
MapperProperty-Instanzen abbildet, welche das Persistenzverhalten dieses Attributs definieren. Beachten Sie, dassColumn-Objekte, die in der abgebildetenTablevorhanden sind, automatisch inColumnProperty-Instanzen bei der Abbildung platziert werden, sofern nicht überschrieben. Bei Verwendung von Declarative wird dieses Argument automatisch basierend auf allenMapperProperty-Instanzen übergeben, die im Körper der deklarierten Klasse deklariert sind.Siehe auch
Das properties-Wörterbuch - in der Übersicht über ORM-abgebildete Klassen
primary_key¶ –
Eine Liste von
Column-Objekten oder alternativ Zeichenkettennamen von Attributnamen, die sich aufColumnbeziehen, die den Primärschlüssel definieren, der gegen die auswählbare Einheit dieses Mappers verwendet wird. Dies ist normalerweise einfach der Primärschlüssel derlocal_table, kann aber hier überschrieben werden.Geändert in Version 2.0.2:
Mapper.primary_key-Argumente können auch als Zeichenketten-Attributnamen angegeben werden.Siehe auch
Abbildung auf einen expliziten Satz von Primärschlüsselspalten - Hintergrund und Anwendungsbeispiel
version_id_col¶ –
Eine
Column, die verwendet wird, um eine laufende Versions-ID von Zeilen in der Tabelle zu führen. Dies wird verwendet, um gleichzeitige Updates oder das Vorhandensein veralteter Daten in einem Flush zu erkennen. Die Methodik besteht darin, zu erkennen, ob eine UPDATE-Anweisung nicht mit der zuletzt bekannten Versions-ID übereinstimmt, woraufhin eineStaleDataError-Ausnahme ausgelöst wird. Standardmäßig muss die Spalte vom TypIntegersein, es sei denn,version_id_generatorgibt einen alternativen Versionsgenerator an.Siehe auch
Konfigurieren eines Versionszählers - Diskussion über Versionszählung und Begründung.
version_id_generator¶ –
Definiert, wie neue Versions-IDs generiert werden sollen. Standardmäßig
None, was bedeutet, dass ein einfaches ganzzahliges Zählschema verwendet wird. Um ein benutzerdefiniertes Versionierungsschema bereitzustellen, geben Sie eine aufrufbare Funktion der Form an:def generate_version(version): return next_version
Alternativ können serverseitige Versionierungsfunktionen wie Trigger oder programmatische Versionierungsschemata außerhalb des Versions-ID-Generators verwendet werden, indem der Wert
Falseangegeben wird. Weitere Informationen zur Verwendung dieser Option finden Sie unter Serverseitige Versionszähler.with_polymorphic¶ –
Ein Tupel in der Form
(<classes>, <selectable>), das den Standardstil des "polymorphen Ladens" angibt, d. h. welche Tabellen gleichzeitig abgefragt werden. <classes> sind beliebige einzelne oder Listen von Mappern und/oder Klassen, die die geerbten Klassen angeben, die gleichzeitig geladen werden sollen. Der spezielle Wert'*'kann verwendet werden, um anzugeben, dass alle absteigenden Klassen sofort geladen werden sollen. Das zweite Tupelargument <selectable> gibt eine auswählbare Einheit an, die zum Abfragen mehrerer Klassen verwendet wird.Der Parameter
Mapper.polymorphic_loadkann in modernen Abbildungen gegenüber der Verwendung vonMapper.with_polymorphicbevorzugt werden, um eine Pro-Unterklasse-Technik zur Angabe von polymorphen Ladestilen zu kennzeichnen.Siehe auch
-
methode
sqlalchemy.orm.Mapper.add_properties(dict_of_properties)¶ Fügt dem Mapper das angegebene Wörterbuch von Eigenschaften hinzu, unter Verwendung von add_property.
-
methode
sqlalchemy.orm.Mapper.add_property(key: str, prop: Column[Any] | MapperProperty[Any]) → None¶ Fügt dem Mapper eine einzelne MapperProperty hinzu.
Wenn der Mapper noch nicht konfiguriert wurde, wird die Eigenschaft einfach dem an den Konstruktor gesendeten initialen Eigenschaften-Wörterbuch hinzugefügt. Wenn dieser Mapper bereits konfiguriert wurde, wird die angegebene MapperProperty sofort konfiguriert.
-
attribut
sqlalchemy.orm.Mapper.all_orm_descriptors¶ Ein Namensraum aller
InspectionAttr-Attribute, die der abgebildeten Klasse zugeordnet sind.Diese Attribute sind in allen Fällen Python Deskriptoren, die der abgebildeten Klasse oder ihren Oberklassen zugeordnet sind.
Dieser Namensraum umfasst Attribute, die der Klasse zugeordnet sind, sowie Attribute, die von Erweiterungsmodulen deklariert wurden. Er umfasst jeden Python-Deskriptor-Typ, der von
InspectionAttrerbt. Dazu gehörenQueryableAttributesowie Erweiterungstypen wiehybrid_property,hybrid_methodundAssociationProxy.Um zwischen abgebildeten Attributen und Erweiterungsattributen zu unterscheiden, verweist das Attribut
InspectionAttr.extension_typeauf eine Konstante, die zwischen verschiedenen Erweiterungstypen unterscheidet.Die Sortierung der Attribute basiert auf folgenden Regeln:
Iterieren Sie durch die Klasse und ihre Oberklassen in der Reihenfolge von der Unterklasse zur Oberklasse (d. h. iterieren Sie durch
cls.__mro__).Für jede Klasse werden die Attribute in der Reihenfolge ausgegeben, in der sie in
__dict__erscheinen, mit Ausnahme derer in Schritt 3 unten. In Python 3.6 und höher ist diese Reihenfolge dieselbe wie die der Konstruktion der Klasse, mit Ausnahme von Attributen, die nachträglich von der Anwendung oder dem Mapper hinzugefügt wurden.Wenn ein bestimmter Attributschlüssel auch im
__dict__der Oberklasse vorhanden ist, wird er in der Iteration für diese Klasse und nicht für die Klasse, in der er zuerst erschien, berücksichtigt.
Der obige Prozess erzeugt eine Sortierung, die in Bezug auf die Reihenfolge, in der Attribute der Klasse zugewiesen wurden, deterministisch ist.
Geändert in Version 1.3.19: Determinierte Sortierung für
Mapper.all_orm_descriptors()gewährleistet.Wenn Sie es mit einem
QueryableAttributezu tun haben, verweist das AttributQueryableAttribute.propertyauf dieMapperProperty-Eigenschaft, was Sie erhalten, wenn Sie auf die Sammlung von abgebildeten Eigenschaften überMapper.attrsverweisen.Warnung
Der Zugriffsnamensraum
Mapper.all_orm_descriptorsist eine Instanz vonOrderedProperties. Dies ist ein wörterbuchähnliches Objekt, das eine kleine Anzahl benannter Methoden wieOrderedProperties.items()undOrderedProperties.values()enthält. Wenn Sie Attribute dynamisch abrufen, verwenden Sie vorzugsweise das Wörterbuchzugriffsschema, z. B.mapper.all_orm_descriptors[somename]anstelle vongetattr(mapper.all_orm_descriptors, somename), um Namenskollisionen zu vermeiden.Siehe auch
-
attribut
sqlalchemy.orm.Mapper.attrs¶ Ein Namensraum aller
MapperProperty-Objekte, die diesem Mapper zugeordnet sind.Dies ist ein Objekt, das jede Eigenschaft basierend auf ihrem Schlüsselnamen bereitstellt. Zum Beispiel würde der Mapper für eine
User-Klasse, die das AttributUser.namehat,mapper.attrs.namebereitstellen, was dieColumnPropertyist, die diename-Spalte repräsentiert. Der Namensraum kann auch iteriert werden, was jedeMapperPropertyliefert.Mapperverfügt über mehrere vordefinierte Ansichten dieses Attributs, die die zurückgegebenen Eigenschaftstypen einschränken, daruntersynonyms,column_attrs,relationshipsundcomposites.Warnung
Der Zugriffsnamensraum
Mapper.attrsist eine Instanz vonOrderedProperties. Dies ist ein wörterbuchähnliches Objekt, das eine kleine Anzahl benannter Methoden wieOrderedProperties.items()undOrderedProperties.values()enthält. Wenn Sie Attribute dynamisch abrufen, verwenden Sie vorzugsweise das Wörterbuchzugriffsschema, z. B.mapper.attrs[somename]anstelle vongetattr(mapper.attrs, somename), um Namenskollisionen zu vermeiden.Siehe auch
-
attribut
sqlalchemy.orm.Mapper.base_mapper: Mapper[Any]¶ Der Basis-Mapper in einer Vererbungskette.
In einem nicht-erblichen Szenario ist dieses Attribut immer dieser
Mapper. In einem Erbschaftsszenario verweist es auf denMapper, der Elternteil aller anderenMapper-Objekte in der Vererbungskette ist.Dies ist ein *schreibgeschütztes* Attribut, das während der Mapper-Konstruktion bestimmt wird. Das Verhalten ist undefiniert, wenn es direkt modifiziert wird.
-
attribut
sqlalchemy.orm.Mapper.c: ReadOnlyColumnCollection[str, Column[Any]]¶ Ein Synonym für
Mapper.columns.
-
methode
sqlalchemy.orm.Mapper.cascade_iterator(type_: str, state: InstanceState[_O], halt_on: Callable[[InstanceState[Any]], bool] | None = None) → Iterator[Tuple[object, Mapper[Any], InstanceState[Any], _InstanceDict]]¶ Iterieren Sie jedes Element und seine Mapper in einem Objektgraphen für alle Beziehungen, die der gegebenen Kaskadenregel entsprechen.
- Parameter:
type_¶ –
Der Name der Kaskadenregel (d. h.
"save-update","delete"usw.).Hinweis
Die
"all"-Kaskade wird hier nicht akzeptiert. Für eine allgemeine Objektdurchlauf-Funktion siehe Wie durchlaufe ich alle Objekte, die zu einem bestimmten Objekt gehören?.state¶ – Der führende InstanceState. Kindelemente werden gemäß den für den Mapper dieses Objekts definierten Beziehungen verarbeitet.
- Gibt zurück:
Die Methode liefert einzelne Objektinstanzen.
Siehe auch
Wie durchlaufe ich alle Objekte, die zu einem bestimmten Objekt gehören? - illustriert eine allgemeine Funktion zum Traversieren aller Objekte, ohne sich auf Kaskaden zu verlassen.
-
attribut
sqlalchemy.orm.Mapper.class_: Type[_O]¶ Die Klasse, zu der dieser
Mapperzugeordnet ist.
-
attribut
sqlalchemy.orm.Mapper.class_manager: ClassManager[_O]¶ Der
ClassManager, der Ereignis-Listener und klassengebundene Deskriptoren für diesenMapperverwaltet.Dies ist ein *schreibgeschütztes* Attribut, das während der Mapper-Konstruktion bestimmt wird. Das Verhalten ist undefiniert, wenn es direkt modifiziert wird.
-
attribut
sqlalchemy.orm.Mapper.column_attrs¶ Gibt einen Namespace aller
ColumnProperty-Eigenschaften zurück, die von diesemMapperverwaltet werden.Siehe auch
Mapper.attrs- Namespace allerMapperProperty-Objekte.
-
attribut
sqlalchemy.orm.Mapper.columns: ReadOnlyColumnCollection[str, Column[Any]]¶ Eine Sammlung von
Column-Objekten oder anderen skalaren Ausdrucksobjekten, die von diesemMapperverwaltet werden.Die Sammlung verhält sich genauso wie das
c-Attribut eines jedenTable-Objekts, mit der Ausnahme, dass nur die in dieser Zuordnung enthaltenen Spalten vorhanden sind und basierend auf dem in der Zuordnung definierten Attributnamen, nicht unbedingt demkey-Attribut derColumnselbst, indiziert werden. Zusätzlich sind auch skalare Ausdrücke, die voncolumn_property()zugeordnet sind, hier vorhanden.Dies ist ein *schreibgeschütztes* Attribut, das während der Mapper-Konstruktion bestimmt wird. Das Verhalten ist undefiniert, wenn es direkt modifiziert wird.
-
methode
sqlalchemy.orm.Mapper.common_parent(other: Mapper[Any]) → bool¶ Gibt True zurück, wenn der angegebene Mapper einen gemeinsamen geerbten Elternteil wie dieser Mapper teilt.
-
attribut
sqlalchemy.orm.Mapper.composites¶ Gibt einen Namespace aller
Composite-Eigenschaften zurück, die von diesemMapperverwaltet werden.Siehe auch
Mapper.attrs- Namespace allerMapperProperty-Objekte.
-
attribut
sqlalchemy.orm.Mapper.concrete: bool¶ Stellt
Truedar, wenn dieserMapperein konkreter Vererbungsmmapper ist.Dies ist ein *schreibgeschütztes* Attribut, das während der Mapper-Konstruktion bestimmt wird. Das Verhalten ist undefiniert, wenn es direkt modifiziert wird.
-
attribut
sqlalchemy.orm.Mapper.configured: bool = False¶ Stellt
Truedar, wenn dieserMapperkonfiguriert wurde.Dies ist ein *schreibgeschütztes* Attribut, das während der Mapper-Konstruktion bestimmt wird. Das Verhalten ist undefiniert, wenn es direkt modifiziert wird.
Siehe auch
-
attribut
sqlalchemy.orm.Mapper.entity¶ Teil der Inspektions-API.
Gibt self.class_ zurück.
-
methode
sqlalchemy.orm.Mapper.get_property(key: str, _configure_mappers: bool = False) → MapperProperty[Any]¶ Gibt eine MapperProperty zurück, die mit dem angegebenen Schlüssel verbunden ist.
-
methode
sqlalchemy.orm.Mapper.get_property_by_column(column: ColumnElement[_T]) → MapperProperty[_T]¶ Gibt bei einem
Column-Objekt dieMapperPropertyzurück, die diese Spalte zuordnet.
-
methode
sqlalchemy.orm.Mapper.identity_key_from_instance(instance: _O) → _IdentityKeyType[_O]¶ Gibt den Identitätsschlüssel für die gegebene Instanz zurück, basierend auf ihren Primärschlüsselattributen.
Wenn der Zustand der Instanz abgelaufen ist, führt der Aufruf dieser Methode zu einer Datenbankprüfung, ob das Objekt gelöscht wurde. Wenn die Zeile nicht mehr existiert, wird
ObjectDeletedErrorausgelöst.Dieser Wert befindet sich typischerweise auch auf dem Instanzzustand unter dem Attributnamen key.
-
methode
sqlalchemy.orm.Mapper.identity_key_from_primary_key(primary_key: Tuple[Any, ...], identity_token: Any | None = None) → _IdentityKeyType[_O]¶ Gibt einen Identitäts-Map-Schlüssel zum Speichern/Abrufen eines Elements aus einer Identitäts-Map zurück.
- Parameter:
primary_key¶ – Eine Liste von Werten, die den Bezeichner angeben.
-
methode
sqlalchemy.orm.Mapper.identity_key_from_row(row: Row[Any] | RowMapping, identity_token: Any | None = None, adapter: ORMAdapter | None = None) → _IdentityKeyType[_O]¶ Gibt einen Identitäts-Map-Schlüssel zum Speichern/Abrufen eines Elements aus der Identitäts-Map zurück.
- Parameter:
row¶ –
Eine
RowoderRowMapping, die aus einem Ergebnisdatensatz erzeugt wurde, der von den ORM-zugeordneten Primärschlüsselspalten ausgewählt wurde.Geändert in Version 2.0:
RowoderRowMappingwerden für das Argument "row" akzeptiert
-
attribut
sqlalchemy.orm.Mapper.inherits: Mapper[Any] | None¶ Referenziert den
Mapper, von dem dieserMappererbt, falls vorhanden.
-
attribut
sqlalchemy.orm.Mapper.is_mapper = True¶ Teil der Inspektions-API.
-
methode
sqlalchemy.orm.Mapper.is_sibling(other: Mapper[Any]) → bool¶ Gibt True zurück, wenn der andere Mapper ein erweiternder Geschwister zu diesem ist. Gemeinsamer Elternteil, aber unterschiedlicher Zweig.
-
methode
sqlalchemy.orm.Mapper.isa(other: Mapper[Any]) → bool¶ Gibt True zurück, wenn dieser Mapper vom angegebenen Mapper erbt.
-
attribut
sqlalchemy.orm.Mapper.iterate_properties¶ Gibt einen Iterator aller MapperProperty-Objekte zurück.
-
attribut
sqlalchemy.orm.Mapper.local_table: FromClause¶ Die unmittelbare
FromClause, auf die sich dieserMapperbezieht.Typischerweise eine Instanz von
Table, kann jedeFromClausesein.Die "lokale" Tabelle ist die wählbare, für die der
Mapperaus Sicht des Attributzugriffs und des Flushens direkt verantwortlich ist. Für nicht vererbende Mapper istMapper.local_tabledasselbe wieMapper.persist_selectable. Für vererbende Mapper bezieht sichMapper.local_tableauf den spezifischen Teil vonMapper.persist_selectable, der die Spalten enthält, die dieserMapperlädt/persistiert, wie z. B. eine bestimmteTableinnerhalb eines Joins.
-
attribut
sqlalchemy.orm.Mapper.mapped_table¶ Veraltet seit Version 1.3: Verwenden Sie .persist_selectable
-
attribut
sqlalchemy.orm.Mapper.mapper¶ Teil der Inspektions-API.
Gibt sich selbst zurück.
-
attribut
sqlalchemy.orm.Mapper.non_primary: bool¶ Stellt
Truedar, wenn dieserMapperein "nicht primärer" Mapper ist, d. h. ein Mapper, der nur zur Auswahl von Zeilen, aber nicht zur Persistenzverwaltung verwendet wird.Dies ist ein *schreibgeschütztes* Attribut, das während der Mapper-Konstruktion bestimmt wird. Das Verhalten ist undefiniert, wenn es direkt modifiziert wird.
-
attribut
sqlalchemy.orm.Mapper.persist_selectable: FromClause¶ Die
FromClause, auf die dieserMapperzugeordnet ist.Typischerweise eine Instanz von
Table, kann jedeFromClausesein.Die
Mapper.persist_selectableähneltMapper.local_table, stellt jedoch dieFromClausedar, die die vererbte Klassenhierarchie insgesamt in einem Vererbungsszenario darstellt.:attr:`.Mapper.persist_selectable` ist auch getrennt vom Attribut
Mapper.selectable, wobei letzteres eine alternative Unterabfrage zur Auswahl von Spalten sein kann. :attr:`.Mapper.persist_selectable` ist auf Spalten ausgerichtet, die bei einer Persistenzoperation geschrieben werden.
-
attribut
sqlalchemy.orm.Mapper.polymorphic_identity: Any | None¶ Stellt einen Bezeichner dar, der mit der Spalte
Mapper.polymorphic_onwährend des Ladens von Ergebniszeilen abgeglichen wird.Nur mit Vererbung verwendet, kann dieses Objekt jeden Typ haben, der mit dem Typ der Spalte vergleichbar ist, die von
Mapper.polymorphic_ondargestellt wird.Dies ist ein *schreibgeschütztes* Attribut, das während der Mapper-Konstruktion bestimmt wird. Das Verhalten ist undefiniert, wenn es direkt modifiziert wird.
-
methode
sqlalchemy.orm.Mapper.polymorphic_iterator() → Iterator[Mapper[Any]]¶ Iterieren Sie durch die Sammlung, einschließlich dieses Mappers und aller abgeleiteten Mapper.
Dies schließt nicht nur die unmittelbar vererbenden Mapper ein, sondern auch alle deren vererbenden Mapper.
Um eine gesamte Hierarchie zu durchlaufen, verwenden Sie
mapper.base_mapper.polymorphic_iterator().
-
attribut
sqlalchemy.orm.Mapper.polymorphic_map: Dict[Any, Mapper[Any]]¶ Eine Zuordnung von "polymorphen Identitäts"-Bezeichnern zu
Mapper-Instanzen innerhalb eines Vererbungsszenarios.Die Bezeichner können jeden Typ haben, der mit dem Typ der Spalte vergleichbar ist, die von
Mapper.polymorphic_ondargestellt wird.Eine Vererbungskette von Mappern wird alle auf dasselbe polymorphe Kartenobjekt verweisen. Das Objekt wird verwendet, um eingehende Ergebniszeilen zu Ziel-Mappern zu korrelieren.
Dies ist ein *schreibgeschütztes* Attribut, das während der Mapper-Konstruktion bestimmt wird. Das Verhalten ist undefiniert, wenn es direkt modifiziert wird.
-
attribut
sqlalchemy.orm.Mapper.polymorphic_on: KeyedColumnElement[Any] | None¶ Die
Columnoder die SQL-Ausdruck, die alspolymorphic_on-Argument für diesenMapperin einem Vererbungsszenario angegeben wurde.Dieses Attribut ist normalerweise eine
Column-Instanz, kann aber auch ein Ausdruck sein, wie z. B. einer, der voncast()abgeleitet wurde.Dies ist ein *schreibgeschütztes* Attribut, das während der Mapper-Konstruktion bestimmt wird. Das Verhalten ist undefiniert, wenn es direkt modifiziert wird.
-
attribut
sqlalchemy.orm.Mapper.primary_key: Tuple[Column[Any], ...]¶ Ein Iterable, das die Sammlung von
Column-Objekten enthält, aus denen sich der „Primärschlüssel“ der zugeordneten Tabelle zusammensetzt, aus Sicht diesesMapper.Diese Liste steht im Gegensatz zum auswählbaren Element in
Mapper.persist_selectable. Im Fall von vererbenden Mappern können einige Spalten von einem übergeordneten Mapper verwaltet werden. Im Fall einesJoinwird der Primärschlüssel beispielsweise durch alle Primärschlüsselspalten aller Tabellen bestimmt, auf die vomJoinverwiesen wird.Die Liste ist auch nicht notwendigerweise identisch mit der Sammlung von Primärschlüsselspalten, die mit den zugrunde liegenden Tabellen verbunden ist; der
Mapperverfügt über einprimary_key-Argument, das überschreiben kann, welche Spalten derMapperals Primärschlüsselspalten betrachtet.Dies ist ein *schreibgeschütztes* Attribut, das während der Mapper-Konstruktion bestimmt wird. Das Verhalten ist undefiniert, wenn es direkt modifiziert wird.
-
methode
sqlalchemy.orm.Mapper.primary_key_from_instance(instance: _O) → Tuple[Any, ...]¶ Gibt die Liste der Primärschlüsselwerte für die gegebene Instanz zurück.
Wenn der Zustand der Instanz abgelaufen ist, führt der Aufruf dieser Methode zu einer Datenbankprüfung, ob das Objekt gelöscht wurde. Wenn die Zeile nicht mehr existiert, wird
ObjectDeletedErrorausgelöst.
-
methode
sqlalchemy.orm.Mapper.primary_mapper() → Mapper[Any]¶ Gibt den primären Mapper zurück, der dem Klassen-Schlüssel (Klasse) dieses Mappers entspricht.
-
attribut
sqlalchemy.orm.Mapper.relationships¶ Ein Namespace aller
Relationship-Eigenschaften, die von diesemMapperverwaltet werden.Warnung
Der Zugriffsbereich
Mapper.relationshipsist eine Instanz vonOrderedProperties. Dies ist ein wörterbuchähnliches Objekt, das eine kleine Anzahl benannter Methoden wieOrderedProperties.items()undOrderedProperties.values()enthält. Beim dynamischen Zugriff auf Attribute sollten Sie die Wörterbuch-Zugriffsschema bevorzugen, z. B.mapper.relationships[somename]anstelle vongetattr(mapper.relationships, somename), um Namenskollisionen zu vermeiden.Siehe auch
Mapper.attrs- Namespace allerMapperProperty-Objekte.
-
attribut
sqlalchemy.orm.Mapper.selectable¶ Die
FromClause, von der dieserMapperstandardmäßig auswählt.Normalerweise ist dies äquivalent zu
persist_selectable, es sei denn, die Funktionwith_polymorphicwird verwendet, in welchem Fall der vollständige „polymorphe“ auswählbare Wert zurückgegeben wird.
-
attribut
sqlalchemy.orm.Mapper.self_and_descendants¶ Die Sammlung, die diesen Mapper und alle nachfolgenden Mapper enthält.
Dies schließt nicht nur die unmittelbar vererbenden Mapper ein, sondern auch alle deren vererbenden Mapper.
-
attribut
sqlalchemy.orm.Mapper.single: bool¶ Gibt
Truezurück, wenn dieserMapperein Single-Table-Inheritance-Mapper ist.Mapper.local_tableistNone, wenn dieses Flag gesetzt ist.Dies ist ein *schreibgeschütztes* Attribut, das während der Mapper-Konstruktion bestimmt wird. Das Verhalten ist undefiniert, wenn es direkt modifiziert wird.
-
attribut
sqlalchemy.orm.Mapper.synonyms¶ Gibt einen Namespace aller
Synonym-Eigenschaften zurück, die von diesemMapperverwaltet werden.Siehe auch
Mapper.attrs- Namespace allerMapperProperty-Objekte.
-
attribut
sqlalchemy.orm.Mapper.tables: Sequence[TableClause]¶ Eine Sequenz, die die Sammlung von
Table- oderTableClause-Objekten enthält, von denen dieserMapperKenntnis hat.Wenn der Mapper einer
Joinoder einemAliaszugeordnet ist, der einenSelectdarstellt, werden die einzelnenTable-Objekte, die das vollständige Konstrukt bilden, hier dargestellt.Dies ist ein *schreibgeschütztes* Attribut, das während der Mapper-Konstruktion bestimmt wird. Das Verhalten ist undefiniert, wenn es direkt modifiziert wird.
-
attribut
sqlalchemy.orm.Mapper.validators: util.immutabledict[str, Tuple[str, Dict[str, Any]]]¶ Ein unveränderliches Wörterbuch von Attributen, die mit dem Dekorator
validates()dekoriert wurden.Das Wörterbuch enthält Zeichenketten-Attributnamen als Schlüssel, die auf die eigentliche Validierungsmethode abgebildet sind.
-
attribut
sqlalchemy.orm.Mapper.with_polymorphic_mappers¶ Die Liste der
Mapper-Objekte, die in die standardmäßige „polymorphe“ Abfrage einbezogen werden.
-
methode
- klasse sqlalchemy.orm.MappedAsDataclass¶
Mixin-Klasse, die anzeigt, dass beim Mappen dieser Klasse diese auch in eine Dataclass umgewandelt wird.
Siehe auch
Deklaratives Mapping von Datenklassen - Vollständiger Hintergrund zum nativen Mapping von Datenklassen in SQLAlchemy
Neu in Version 2.0.
- klasse sqlalchemy.orm.MappedClassProtocol¶
Ein Protokoll, das eine SQLAlchemy zugeordnete Klasse repräsentiert.
Das Protokoll ist generisch für den Typ der Klasse, verwenden Sie
MappedClassProtocol[Any], um jede zugeordnete Klasse zuzulassen.Klassensignatur
class
sqlalchemy.orm.MappedClassProtocol(typing_extensions.Protocol)
Die Designs von flambé! dem Drachen und Der Alchemist wurden von Rotem Yaari erstellt und großzügig gespendet.
Erstellt mit Sphinx 7.2.6. Dokumentation zuletzt generiert: Di 11 Mär 2025 14:40:17 EDT