SQL Expression Language Grundlegende Konstrukte

Basisklassen und Mixins, die zur Komposition von SQL Expression Language-Elementen verwendet werden.

Objektname Beschreibung

CacheKey

Der Schlüssel, der verwendet wird, um ein SQL-Anweisungskonstrukt im SQL-Kompilierungs-Cache zu identifizieren.

ClauseElement

Basisklasse für Elemente eines programmatisch erstellten SQL-Ausdrucks.

DialectKWArgs

Stellt die Fähigkeit einer Klasse her, dialektspezifische Argumente mit Standardwerten und Konstruktorvalidierung zu haben.

HasCacheKey

Mixin für Objekte, die einen Cache-Schlüssel erzeugen können.

LambdaElement

Ein SQL-Konstrukt, bei dem der Zustand als nicht aufgerufenes Lambda gespeichert wird.

StatementLambdaElement

Stellt eine komponierbare SQL-Anweisung als LambdaElement dar.

class sqlalchemy.sql.expression.CacheKey

Der Schlüssel, der verwendet wird, um ein SQL-Anweisungskonstrukt im SQL-Kompilierungs-Cache zu identifizieren.

Klassensignatur

class sqlalchemy.sql.expression.CacheKey (builtins.tuple)

attribute sqlalchemy.sql.expression.CacheKey.bindparams: Sequence[BindParameter[Any]]

Alias für Feldnummer 1

attribute sqlalchemy.sql.expression.CacheKey.key: Tuple[Any, ...]

Alias für Feldnummer 0

method sqlalchemy.sql.expression.CacheKey.to_offline_string(statement_cache: MutableMapping[Any, str], statement: ClauseElement, parameters: _CoreSingleExecuteParams) str

Generiert eine „Offline-String“-Form dieses CacheKey

Der „Offline-String“ ist im Grunde der SQL-String für die Anweisung plus eine Darstellung der gebundenen Parameterwerte in Serie. Während das CacheKey-Objekt für die Verwendung als Cache-Schlüssel von In-Memory-Identitäten abhängt, ist die „Offline“-Version für einen Cache geeignet, der auch für andere Prozesse funktioniert.

Der angegebene statement_cache ist ein wörterbuchähnliches Objekt, in dem die String-Form der Anweisung selbst zwischengespeichert wird. Dieses Wörterbuch sollte in einem längerfristigen Geltungsbereich liegen, um die Zeit für die Stringifizierung von Anweisungen zu reduzieren.

class sqlalchemy.sql.expression.ClauseElement

Basisklasse für Elemente eines programmatisch erstellten SQL-Ausdrucks.

Klassensignatur

class sqlalchemy.sql.expression.ClauseElement (sqlalchemy.sql.annotation.SupportsWrappingAnnotations, sqlalchemy.sql.cache_key.MemoizedHasCacheKey, sqlalchemy.sql.traversals.HasCopyInternals, sqlalchemy.sql.visitors.ExternallyTraversible, sqlalchemy.sql.expression.CompilerElement)

method sqlalchemy.sql.expression.ClauseElement.compare(other: ClauseElement, **kw: Any) bool

Vergleicht dieses ClauseElement mit dem gegebenen ClauseElement.

Unterklassen sollten das Standardverhalten überschreiben, das ein direkter Identitätsvergleich ist.

**kw sind Argumente, die von den `compare()`-Methoden von Unterklassen verwendet werden und zur Modifizierung der Vergleichskriterien verwendet werden können (siehe ColumnElement).

method sqlalchemy.sql.expression.ClauseElement.compile(bind: _HasDialect | None = None, dialect: Dialect | None = None, **kw: Any) Compiled

geerbt von der CompilerElement.compile() Methode von CompilerElement

Kompiliert diesen SQL-Ausdruck.

Der Rückgabewert ist ein Compiled Objekt. Das Aufrufen von str() oder unicode() auf dem zurückgegebenen Wert ergibt eine String-Repräsentation des Ergebnisses. Das Compiled Objekt kann auch ein Dictionary von Bindungsparameternamen und -werten über den params-Accessor zurückgeben.

Parameter:
  • bind – Eine Connection oder Engine, die eine Dialect bereitstellen kann, um ein Compiled-Objekt zu generieren. Wenn die Parameter bind und dialect beide weggelassen werden, wird ein Standard-SQL-Compiler verwendet.

  • column_keys – Verwendet für INSERT- und UPDATE-Anweisungen, eine Liste von Spaltennamen, die in der VALUES-Klausel der kompilierten Anweisung enthalten sein sollten. Wenn None, werden alle Spalten aus dem Zieltabellenobjekt gerendert.

  • dialect – Eine Dialect-Instanz, die ein Compiled-Objekt generieren kann. Dieses Argument hat Vorrang vor dem Argument bind.

  • compile_kwargs

    optionales Dictionary mit zusätzlichen Parametern, die an den Compiler in allen "visit"-Methoden weitergegeben werden. Dies ermöglicht es beispielsweise, benutzerdefinierte Flags an benutzerdefinierte Kompilierungskonstrukte zu übergeben. Es wird auch für den Fall verwendet, dass das Flag literal_binds weitergegeben wird.

    from sqlalchemy.sql import table, column, select
    
    t = table("t", column("x"))
    
    s = select(t).where(t.c.x == 5)
    
    print(s.compile(compile_kwargs={"literal_binds": True}))

method sqlalchemy.sql.expression.ClauseElement.get_children(*, omit_attrs: Tuple[str, ...] = (), **kw: Any) Iterable[HasTraverseInternals]

geerbt von der HasTraverseInternals.get_children() Methode von HasTraverseInternals

Gibt direkte Kind-Elemente HasTraverseInternals dieses HasTraverseInternals zurück.

Dies wird für die Besuchs-Traversal verwendet.

**kw kann Flags enthalten, die die zurückgegebene Sammlung ändern, z. B. um eine Teilmenge von Elementen zurückzugeben, um größere Traversierungen zu reduzieren, oder um Kind-Elemente aus einem anderen Kontext zurückzugeben (z. B. Schema-Ebene Sammlungen anstelle von Klausel-Ebene).

attribute sqlalchemy.sql.expression.ClauseElement.inherit_cache: bool | None = None

geerbt vom HasCacheKey.inherit_cache Attribut von HasCacheKey

Gibt an, ob diese HasCacheKey-Instanz das Cache-Schlüssel-Generierungsschema ihrer direkten Oberklasse verwenden soll.

Das Attribut hat standardmäßig den Wert None, was bedeutet, dass ein Konstrukt noch nicht berücksichtigt hat, ob es für die Teilnahme an der Caching-Mechanik geeignet ist. Dies ist funktional äquivalent zum Setzen des Wertes auf False, außer dass auch eine Warnung ausgegeben wird.

Dieses Flag kann auf True für eine bestimmte Klasse gesetzt werden, wenn die SQL, die diesem Objekt entspricht, nicht auf Basis von Attributen geändert wird, die lokal zu dieser Klasse und nicht zu ihrer Oberklasse gehören.

Siehe auch

Unterstützung für benutzerdefinierte Konstrukte für Caching aktivieren - Allgemeine Richtlinien für das Setzen des Attributs HasCacheKey.inherit_cache für Drittanbieter- oder benutzerdefinierte SQL-Konstrukte.

method sqlalchemy.sql.expression.ClauseElement.params(_ClauseElement__optionaldict: Mapping[str, Any] | None = None, **kwargs: Any) Self

Gibt eine Kopie zurück, bei der bindparam() Elemente ersetzt wurden.

Gibt eine Kopie dieses ClauseElement zurück, bei der bindparam() Elemente durch Werte aus dem angegebenen Wörterbuch ersetzt wurden.

>>> clause = column("x") + bindparam("foo")
>>> print(clause.compile().params)
{'foo':None}
>>> print(clause.params({"foo": 7}).compile().params)
{'foo':7}
method sqlalchemy.sql.expression.ClauseElement.self_group(against: OperatorType | None = None) ClauseElement

Wendet eine „Gruppierung“ auf dieses ClauseElement an.

Diese Methode wird von Unterklassen überschrieben, um ein „Gruppierungs“-Konstrukt zurückzugeben, d. h. Klammern. Insbesondere wird sie von „binären“ Ausdrücken verwendet, um sich selbst zu gruppieren, wenn sie in einen größeren Ausdruck eingefügt werden, sowie von select()-Konstrukten, wenn sie in die FROM-Klausel eines anderen select() eingefügt werden. (Beachten Sie, dass Unterabfragen normalerweise mit der Methode Select.alias() erstellt werden sollten, da viele Plattformen benannte verschachtelte SELECT-Anweisungen erfordern).

Wenn Ausdrücke miteinander komponiert werden, ist die Anwendung von self_group() automatisch – Endbenutzercode muss diese Methode nie direkt verwenden. Beachten Sie, dass SQLAlchemys Klauselkonstrukte die Operatorrangfolge berücksichtigen – Klammern sind möglicherweise nicht erforderlich, z. B. in einem Ausdruck wie x OR (y AND z) – AND hat Vorrang vor OR.

Die Basis-Methode self_group() von ClauseElement gibt einfach self zurück.

method sqlalchemy.sql.expression.ClauseElement.unique_params(_ClauseElement__optionaldict: Dict[str, Any] | None = None, **kwargs: Any) Self

Gibt eine Kopie zurück, bei der bindparam() Elemente ersetzt wurden.

Gleiche Funktionalität wie ClauseElement.params(), fügt aber unique=True zu betroffenen Bindparametern hinzu, damit mehrere Anweisungen verwendet werden können.

class sqlalchemy.sql.base.DialectKWArgs

Stellt die Fähigkeit einer Klasse her, dialektspezifische Argumente mit Standardwerten und Konstruktorvalidierung zu haben.

Die DialectKWArgs interagiert mit den DefaultDialect.construct_arguments, die in einer Dialekt vorhanden sind.

classmethod sqlalchemy.sql.base.DialectKWArgs.argument_for(dialect_name, argument_name, default)

Fügt eine neue Art von dialektspezifischem Schlüsselwortargument für diese Klasse hinzu.

Z. B.

Index.argument_for("mydialect", "length", None)

some_index = Index("a", "b", mydialect_length=5)

Die Methode DialectKWArgs.argument_for() ist eine per-Argument-Methode, um zusätzliche Argumente zum Wörterbuch DefaultDialect.construct_arguments hinzuzufügen. Dieses Wörterbuch enthält eine Liste von Argumentnamen, die von verschiedenen schema-level Konstrukten im Namen einer Dialekt akzeptiert werden.

Neue Dialekte sollten dieses Wörterbuch typischerweise auf einmal als Datenmember der Dialektklasse angeben. Der Anwendungsfall für die ad-hoc-Addition von Argumentnamen ist typischerweise für Endbenutzercode, der auch ein benutzerdefiniertes Kompilierungsschema verwendet, das die zusätzlichen Argumente konsumiert.

Parameter:
  • dialect_name – Name einer Dialekt. Die Dialekt muss lokalisierbar sein, sonst wird eine NoSuchModuleError ausgelöst. Die Dialekt muss außerdem eine vorhandene Sammlung DefaultDialect.construct_arguments enthalten, die angibt, dass sie am System für Schlüsselwortargument-Validierung und Standardwerte teilnimmt, andernfalls wird ein ArgumentError ausgelöst. Wenn die Dialekt diese Sammlung nicht enthält, können bereits beliebige Schlüsselwortargumente im Namen dieser Dialekt angegeben werden. Alle in SQLAlchemy enthaltenen Dialekte enthalten diese Sammlung, bei Dialekten von Drittanbietern kann die Unterstützung variieren.

  • argument_name – Name des Parameters.

  • default – Standardwert des Parameters.

attribute sqlalchemy.sql.base.DialectKWArgs.dialect_kwargs

Eine Sammlung von Schlüsselwortargumenten, die als Dialekt-spezifische Optionen für dieses Konstrukt angegeben wurden.

Die Argumente sind hier in ihrem ursprünglichen Format <dialect>_<kwarg> vorhanden. Nur tatsächlich übergebene Argumente sind enthalten; im Gegensatz zur Sammlung DialectKWArgs.dialect_options, die alle von dieser Dialekt bekannten Optionen einschließlich Standardwerten enthält.

Die Sammlung ist auch beschreibbar; Schlüssel werden im Format <dialect>_<kwarg> akzeptiert, wobei der Wert in die Liste der Optionen aufgenommen wird.

Siehe auch

DialectKWArgs.dialect_options - verschachteltes Wörterbuchformat

attribute sqlalchemy.sql.base.DialectKWArgs.dialect_options

Eine Sammlung von Schlüsselwortargumenten, die als Dialekt-spezifische Optionen für dieses Konstrukt angegeben wurden.

Dies ist eine zweistufig verschachtelte Registry, die auf <dialect_name> und <argument_name> geschlüsselt ist. Zum Beispiel ist das Argument postgresql_where auffindbar unter

arg = my_object.dialect_options["postgresql"]["where"]

Neu in Version 0.9.2.

Siehe auch

DialectKWArgs.dialect_kwargs - flaches Wörterbuchformat

attribute sqlalchemy.sql.base.DialectKWArgs.kwargs

Ein Synonym für DialectKWArgs.dialect_kwargs.

class sqlalchemy.sql.traversals.HasCacheKey

Mixin für Objekte, die einen Cache-Schlüssel erzeugen können.

Diese Klasse befindet sich normalerweise in einer Hierarchie, die mit der Basisklasse HasTraverseInternals beginnt, aber dies ist optional. Derzeit sollte die Klasse eigenständig funktionieren, ohne HasTraverseInternals einzubinden.

Mitglieder

inherit_cache

attribute sqlalchemy.sql.traversals.HasCacheKey.inherit_cache: bool | None = None

Gibt an, ob diese HasCacheKey-Instanz das Cache-Schlüssel-Generierungsschema ihrer direkten Oberklasse verwenden soll.

Das Attribut hat standardmäßig den Wert None, was bedeutet, dass ein Konstrukt noch nicht berücksichtigt hat, ob es für die Teilnahme an der Caching-Mechanik geeignet ist. Dies ist funktional äquivalent zum Setzen des Wertes auf False, außer dass auch eine Warnung ausgegeben wird.

Dieses Flag kann auf True für eine bestimmte Klasse gesetzt werden, wenn die SQL, die diesem Objekt entspricht, nicht auf Basis von Attributen geändert wird, die lokal zu dieser Klasse und nicht zu ihrer Oberklasse gehören.

Siehe auch

Unterstützung für benutzerdefinierte Konstrukte für Caching aktivieren - Allgemeine Richtlinien für das Setzen des Attributs HasCacheKey.inherit_cache für Drittanbieter- oder benutzerdefinierte SQL-Konstrukte.

class sqlalchemy.sql.expression.LambdaElement

Ein SQL-Konstrukt, bei dem der Zustand als nicht aufgerufenes Lambda gespeichert wird.

Der LambdaElement wird transparent erzeugt, wenn Lambda-Ausdrücke in SQL-Konstrukte übergeben werden, wie zum Beispiel

stmt = select(table).where(lambda: table.c.col == parameter)

Der LambdaElement ist die Basis für StatementLambdaElement, das eine vollständige Anweisung innerhalb eines Lambdas darstellt.

Neu in Version 1.4.

class sqlalchemy.sql.expression.StatementLambdaElement

Stellt eine komponierbare SQL-Anweisung als LambdaElement dar.

Das StatementLambdaElement wird mit der Funktion lambda_stmt() konstruiert

from sqlalchemy import lambda_stmt

stmt = lambda_stmt(lambda: select(table))

Nach der Konstruktion können zusätzliche Kriterien durch Hinzufügen weiterer Lambdas zur Anweisung aufgebaut werden, die das vorhandene Anweisungsobjekt als einzelnen Parameter akzeptieren.

stmt += lambda s: s.where(table.c.col == parameter)

Neu in Version 1.4.

Methode sqlalchemy.sql.expression.StatementLambdaElement.add_criteria(other: Callable[[Any], Any], enable_tracking: bool = True, track_on: Any | None = None, track_closure_variables: bool = True, track_bound_values: bool = True) StatementLambdaElement

Fügt diesem StatementLambdaElement neue Kriterien hinzu.

Z. B.

>>> def my_stmt(parameter):
...     stmt = lambda_stmt(
...         lambda: select(table.c.x, table.c.y),
...     )
...     stmt = stmt.add_criteria(lambda: table.c.x > parameter)
...     return stmt

Die Methode StatementLambdaElement.add_criteria() ist äquivalent zur Verwendung des Python-Additionsoperators, um ein neues Lambda hinzuzufügen, mit der Ausnahme, dass zusätzliche Argumente hinzugefügt werden können, einschließlich track_closure_values und track_on.

>>> def my_stmt(self, foo):
...     stmt = lambda_stmt(
...         lambda: select(func.max(foo.x, foo.y)),
...         track_closure_variables=False,
...     )
...     stmt = stmt.add_criteria(lambda: self.where_criteria, track_on=[self])
...     return stmt

Siehe lambda_stmt() für eine Beschreibung der akzeptierten Parameter.

Attribut sqlalchemy.sql.expression.StatementLambdaElement.is_delete
Attribut sqlalchemy.sql.expression.StatementLambdaElement.is_dml
Attribut sqlalchemy.sql.expression.StatementLambdaElement.is_insert
Attribut sqlalchemy.sql.expression.StatementLambdaElement.is_select
Attribut sqlalchemy.sql.expression.StatementLambdaElement.is_text
Attribut sqlalchemy.sql.expression.StatementLambdaElement.is_update
Methode sqlalchemy.sql.expression.StatementLambdaElement.spoil() NullLambdaStatement

Gibt ein neues StatementLambdaElement zurück, das alle Lambdas bei jeder Ausführung bedingungslos ausführt.