SQLAlchemy 2.0 Dokumentation
SQLAlchemy ORM
- ORM Schnellstart
- ORM Abgebildete Klassenkonfiguration
- Beziehungskonfiguration
- ORM Abfragehandbuch
- Verwendung der Sitzung
- Ereignisse und Interna
- ORM Erweiterungen
- ORM Beispiele
Projektversionen
- Vorher: Ordering List
- Nächste: Hybrid Attributes
- Oben: Startseite
- Auf dieser Seite
Horizontale Sharding¶
Unterstützung für horizontales Sharding.
Definiert ein rudimentäres System für „horizontales Sharding“, das es einer Session ermöglicht, Abfragen und Persistenzoperationen auf mehrere Datenbanken zu verteilen.
Ein Anwendungsbeispiel finden Sie im Beispiel Horizontales Sharding, das in der Quellcodeverteilung enthalten ist.
Deep Alchemy
Die Erweiterung für horizontales Sharding ist eine erweiterte Funktion, die eine komplexe Interaktion zwischen Anweisungen und Datenbanken sowie die Verwendung von semi-öffentlichen APIs für nicht-triviale Fälle beinhaltet. Einfachere Ansätze zum Verweisen auf mehrere Datenbank-„Shards“, meistens unter Verwendung einer separaten Session pro „Shard“, sollten immer zuerst in Betracht gezogen werden, bevor dieses komplexere und weniger produktionserprobte System verwendet wird.
API-Dokumentation¶
| Objektname | Beschreibung |
|---|---|
Eine Loader-Option für Anweisungen, um eine spezifische Shard-ID für die primäre Abfrage sowie für zusätzliche Beziehungs- und Spaltenloader anzuwenden. |
|
Abfrageklasse, die mit |
|
- class sqlalchemy.ext.horizontal_shard.ShardedSession¶
Mitglieder
Klassensignatur
class
sqlalchemy.ext.horizontal_shard.ShardedSession(sqlalchemy.orm.session.Session)-
method
sqlalchemy.ext.horizontal_shard.ShardedSession.__init__(shard_chooser: ShardChooser, identity_chooser: Optional[IdentityChooser] = None, execute_chooser: Optional[Callable[[ORMExecuteState], Iterable[Any]]] = None, shards: Optional[Dict[str, Any]] = None, query_cls: Type[Query[_T]] = <class 'sqlalchemy.ext.horizontal_shard.ShardedQuery'>, *, id_chooser: Optional[Callable[[Query[_T], Iterable[_T]], Iterable[Any]]] = None, query_chooser: Optional[Callable[[Executable], Iterable[Any]]] = None, **kwargs: Any) → None¶ Erstellt eine ShardedSession.
- Parameter:
shard_chooser¶ – Ein aufrufbares Objekt, das einen Mapper, eine zugeordnete Instanz und möglicherweise eine SQL-Klausel erhält und eine Shard-ID zurückgibt. Diese ID kann auf den im Objekt vorhandenen Attributen oder auf einem Round-Robin-Verfahren basieren. Wenn das Verfahren auf einer Auswahl basiert, sollte es einen Zustand in der Instanz festlegen, um sie zukünftig als an diesem Shard teilnehmend zu markieren.
identity_chooser¶ –
Ein aufrufbares Objekt, das einen Mapper und ein primäres Schlüsselargument erhält und eine Liste von Shard-IDs zurückgeben sollte, in denen sich dieser primäre Schlüssel befinden könnte.
Geändert in Version 2.0: Der Parameter
identity_chooserersetzt den Parameterid_chooser.execute_chooser¶ –
Für einen gegebenen
ORMExecuteStategibt es die Liste der Shard-IDs zurück, an die die Abfrage gesendet werden soll. Die Ergebnisse aller zurückgegebenen Shards werden zu einer einzigen Liste zusammengefasst.Geändert in Version 1.4: Der Parameter
execute_chooserersetzt den Parameterquery_chooser.shards¶ – Ein Wörterbuch von Zeichenketten-Shard-Namen zu
Engine-Objekten.
-
method
sqlalchemy.ext.horizontal_shard.ShardedSession.connection_callable(mapper: Mapper[_T] | None = None, instance: Any | None = None, shard_id: ShardIdentifier | None = None, **kw: Any) → Connection¶ Stellt eine
Connectionfür den Flush-Prozess der Arbeitseinheit bereit.
-
method
sqlalchemy.ext.horizontal_shard.ShardedSession.get_bind(mapper: _EntityBindKey[_O] | None = None, *, shard_id: ShardIdentifier | None = None, instance: Any | None = None, clause: ClauseElement | None = None, **kw: Any) → _SessionBind¶ Gibt ein „Bind“, an das diese
Sessiongebunden ist, zurück.Das „Bind“ ist normalerweise eine Instanz von
Engine, außer wenn dieSessionexplizit direkt an eineConnectiongebunden wurde.Für eine mehrfach gebundene oder ungebundene
Sessionwerden die Argumentemapperoderclauseverwendet, um das entsprechende Bind zu bestimmen, das zurückgegeben werden soll.Beachten Sie, dass das Argument „mapper“ normalerweise vorhanden ist, wenn
Session.get_bind()über eine ORM-Operation wieSession.query(), jede einzelne INSERT/UPDATE/DELETE-Operation innerhalb einesSession.flush()-Aufrufs usw. aufgerufen wird.Die Reihenfolge der Auflösung ist
Wenn ein Mapper angegeben ist und
Session.bindsvorhanden ist, wird ein Bind gesucht, basierend zuerst auf dem verwendeten Mapper, dann auf der verwendeten zugeordneten Klasse, dann auf beliebigen Basisklassen, die in der__mro__der zugeordneten Klasse vorhanden sind, von spezifischeren Oberklassen zu allgemeineren.Wenn eine Klausel angegeben ist und
Session.bindsvorhanden ist, wird ein Bind gesucht, basierend aufTable-Objekten, die in der angegebenen Klausel gefunden wurden und inSession.bindsvorhanden sind.Wenn
Session.bindsvorhanden ist, geben Sie diese zurück.Wenn eine Klausel angegeben ist, wird versucht, ein Bind zurückzugeben, das mit den
MetaDataverbunden ist, die letztendlich mit der Klausel verbunden sind.Wenn ein Mapper angegeben ist, wird versucht, ein Bind zurückzugeben, das mit den
MetaDataverbunden ist, die letztendlich mit derTableoder einem anderen wählbaren Element verbunden sind, dem der Mapper zugeordnet ist.Es kann kein Bind gefunden werden, es wird
UnboundExecutionErrorausgelöst.
Beachten Sie, dass die Methode
Session.get_bind()in einer benutzerdefinierten Unterklasse vonSessionüberschrieben werden kann, um jedes beliebige Bind-Auflösungsschema bereitzustellen. Siehe das Beispiel unter Benutzerdefiniertes vertikales Partitionieren.- Parameter:
mapper¶ – Optionale zugeordnete Klasse oder entsprechende
Mapper-Instanz. Das Bind kann von einemMapperabgeleitet werden, indem zuerst die Zuordnung „binds“ derSessionkonsultiert und dann dieMetaDatakonsultiert wird, die derTablezugeordnet ist, der derMapperzugeordnet ist, um ein Bind zu erhalten.clause¶ – Ein
ClauseElement(d. h.select(),text(), etc.). Wenn das Argumentmappernicht vorhanden ist oder kein Bind erzeugt werden konnte, wird der angegebene Ausdruckskonstrukt nach einem gebundenen Element durchsucht, typischerweise einerTable, die mit einer gebundenenMetaDataverbunden ist.
-
method
- class sqlalchemy.ext.horizontal_shard.set_shard_id¶
Eine Loader-Option für Anweisungen, um eine spezifische Shard-ID für die primäre Abfrage sowie für zusätzliche Beziehungs- und Spaltenloader anzuwenden.
Die Option
set_shard_idkann mit der MethodeExecutable.options()jeder ausführbaren Anweisung angewendet werdenstmt = ( select(MyObject) .where(MyObject.name == "some name") .options(set_shard_id("shard1")) )
Oben wird die Anweisung bei der Ausführung auf den „shard1“-Shard-Identifikator für die primäre Abfrage sowie für alle Beziehungs- und Spaltenladestrategien beschränkt, einschließlich Eager-Loader wie
selectinload(), Deferred-Spaltenloader wiedefer()und den Lazy-Beziehungs-Loaderlazyload().Auf diese Weise hat die Option
set_shard_ideinen viel breiteren Geltungsbereich als die Verwendung des Arguments „shard_id“ im WörterbuchSession.execute.bind_arguments.Neu in Version 2.0.0.
Mitglieder
Klassensignatur
class
sqlalchemy.ext.horizontal_shard.set_shard_id(sqlalchemy.orm.ORMOption)-
method
sqlalchemy.ext.horizontal_shard.set_shard_id.__init__(shard_id: str, propagate_to_loaders: bool = True)¶ Erstellt eine Option
set_shard_id.- Parameter:
shard_id¶ – Shard-Identifikator
propagate_to_loaders¶ – Wenn auf dem Standardwert
Truebelassen, hat die Shard-Option Auswirkungen auf Lazy-Loader wielazyload()unddefer(); wennFalse, wird die Option nicht auf geladene Objekte übertragen. Beachten Sie, dassdefer()in jedem Fall immer auf die Shard-ID der übergeordneten Zeile beschränkt ist, sodass der Parameter nur Auswirkungen auf das Verhalten derlazyload()-Strategie hat.
-
attribute
sqlalchemy.ext.horizontal_shard.set_shard_id.propagate_to_loaders¶ Wenn
True, gibt an, dass diese Option für „sekundäre“ SELECT-Anweisungen, die für Beziehungs-Lazy-Loader sowie für Attribut-Lade-/Aktualisierungsoperationen auftreten, übernommen werden soll.
-
method
- class sqlalchemy.ext.horizontal_shard.ShardedQuery¶
Abfrageklasse, die mit
ShardedSessionverwendet wird.Legacy-Funktion
Die
ShardedQueryist eine Unterklasse der älterenQuery-Klasse. DieShardedSessionunterstützt nun die Ausführung im 2.0-Stil über die MethodeShardedSession.execute().Mitglieder
Klassensignatur
class
sqlalchemy.ext.horizontal_shard.ShardedQuery(sqlalchemy.orm.Query)-
method
sqlalchemy.ext.horizontal_shard.ShardedQuery.set_shard(shard_id: str) → Self¶ Gibt eine neue Abfrage zurück, die auf eine einzelne Shard-ID beschränkt ist.
Alle nachfolgenden Operationen mit der zurückgegebenen Abfrage erfolgen gegen den einzelnen Shard, unabhängig von anderem Zustand.
Die shard_id kann für eine Ausführung im 2.0-Stil an das Wörterbuch bind_arguments von
Session.execute()übergeben werdenresults = session.execute(stmt, bind_arguments={"shard_id": "my_shard"})
-
method
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