SQLAlchemy 2.0 Dokumentation
SQLAlchemy ORM
- ORM Schnellstart
- ORM Abgebildete Klassenkonfiguration
- Beziehungskonfiguration
- ORM Abfragehandbuch
- Verwendung der Sitzung
- Ereignisse und Interna
- ORM Erweiterungen
- Asynchrone E/A (asyncio)
- Association Proxy¶
- Vereinfachung von Skalaren Sammlungen
- Vereinfachung von Association-Objekten
- Proxy auf Dictionary-basierte Sammlungen
- Zusammengesetzte Association-Proxies
- Abfragen mit Association-Proxies
- Kaskadierendes Skalares Löschen
- Skalare Beziehungen
- API-Dokumentation
association_proxy()AssociationProxyAssociationProxy.__init__()AssociationProxy.cascade_scalar_deletesAssociationProxy.create_on_none_assignmentAssociationProxy.creatorAssociationProxy.extension_typeAssociationProxy.for_class()AssociationProxy.getset_factoryAssociationProxy.infoAssociationProxy.is_aliased_classAssociationProxy.is_attributeAssociationProxy.is_bundleAssociationProxy.is_clause_elementAssociationProxy.is_instanceAssociationProxy.is_mapperAssociationProxy.is_propertyAssociationProxy.is_selectableAssociationProxy.keyAssociationProxy.proxy_bulk_setAssociationProxy.proxy_factoryAssociationProxy.target_collectionAssociationProxy.value_attr
AssociationProxyInstanceAssociationProxyInstance.__eq__()AssociationProxyInstance.__le__()AssociationProxyInstance.__lt__()AssociationProxyInstance.__ne__()AssociationProxyInstance.all_()AssociationProxyInstance.any()AssociationProxyInstance.any_()AssociationProxyInstance.asc()AssociationProxyInstance.attrAssociationProxyInstance.between()AssociationProxyInstance.bitwise_and()AssociationProxyInstance.bitwise_lshift()AssociationProxyInstance.bitwise_not()AssociationProxyInstance.bitwise_or()AssociationProxyInstance.bitwise_rshift()AssociationProxyInstance.bitwise_xor()AssociationProxyInstance.bool_op()AssociationProxyInstance.collate()AssociationProxyInstance.collection_classAssociationProxyInstance.concat()AssociationProxyInstance.contains()AssociationProxyInstance.delete()AssociationProxyInstance.desc()AssociationProxyInstance.distinct()AssociationProxyInstance.endswith()AssociationProxyInstance.for_proxy()AssociationProxyInstance.get()AssociationProxyInstance.has()AssociationProxyInstance.icontains()AssociationProxyInstance.iendswith()AssociationProxyInstance.ilike()AssociationProxyInstance.in_()AssociationProxyInstance.infoAssociationProxyInstance.is_()AssociationProxyInstance.is_distinct_from()AssociationProxyInstance.is_not()AssociationProxyInstance.is_not_distinct_from()AssociationProxyInstance.isnot()AssociationProxyInstance.isnot_distinct_from()AssociationProxyInstance.istartswith()AssociationProxyInstance.like()AssociationProxyInstance.local_attrAssociationProxyInstance.match()AssociationProxyInstance.not_ilike()AssociationProxyInstance.not_in()AssociationProxyInstance.not_like()AssociationProxyInstance.notilike()AssociationProxyInstance.notin_()AssociationProxyInstance.notlike()AssociationProxyInstance.nulls_first()AssociationProxyInstance.nulls_last()AssociationProxyInstance.nullsfirst()AssociationProxyInstance.nullslast()AssociationProxyInstance.op()AssociationProxyInstance.operate()AssociationProxyInstance.parentAssociationProxyInstance.regexp_match()AssociationProxyInstance.regexp_replace()AssociationProxyInstance.remote_attrAssociationProxyInstance.reverse_operate()AssociationProxyInstance.scalarAssociationProxyInstance.set()AssociationProxyInstance.startswith()AssociationProxyInstance.target_classAssociationProxyInstance.timetuple
ObjectAssociationProxyInstanceObjectAssociationProxyInstance.__le__()ObjectAssociationProxyInstance.__lt__()ObjectAssociationProxyInstance.all_()ObjectAssociationProxyInstance.any()ObjectAssociationProxyInstance.any_()ObjectAssociationProxyInstance.asc()ObjectAssociationProxyInstance.attrObjectAssociationProxyInstance.between()ObjectAssociationProxyInstance.bitwise_and()ObjectAssociationProxyInstance.bitwise_lshift()ObjectAssociationProxyInstance.bitwise_not()ObjectAssociationProxyInstance.bitwise_or()ObjectAssociationProxyInstance.bitwise_rshift()ObjectAssociationProxyInstance.bitwise_xor()ObjectAssociationProxyInstance.bool_op()ObjectAssociationProxyInstance.collate()ObjectAssociationProxyInstance.concat()ObjectAssociationProxyInstance.contains()ObjectAssociationProxyInstance.desc()ObjectAssociationProxyInstance.distinct()ObjectAssociationProxyInstance.endswith()ObjectAssociationProxyInstance.has()ObjectAssociationProxyInstance.icontains()ObjectAssociationProxyInstance.iendswith()ObjectAssociationProxyInstance.ilike()ObjectAssociationProxyInstance.in_()ObjectAssociationProxyInstance.is_()ObjectAssociationProxyInstance.is_distinct_from()ObjectAssociationProxyInstance.is_not()ObjectAssociationProxyInstance.is_not_distinct_from()ObjectAssociationProxyInstance.isnot()ObjectAssociationProxyInstance.isnot_distinct_from()ObjectAssociationProxyInstance.istartswith()ObjectAssociationProxyInstance.like()ObjectAssociationProxyInstance.local_attrObjectAssociationProxyInstance.match()ObjectAssociationProxyInstance.not_ilike()ObjectAssociationProxyInstance.not_in()ObjectAssociationProxyInstance.not_like()ObjectAssociationProxyInstance.notilike()ObjectAssociationProxyInstance.notin_()ObjectAssociationProxyInstance.notlike()ObjectAssociationProxyInstance.nulls_first()ObjectAssociationProxyInstance.nulls_last()ObjectAssociationProxyInstance.nullsfirst()ObjectAssociationProxyInstance.nullslast()ObjectAssociationProxyInstance.op()ObjectAssociationProxyInstance.operate()ObjectAssociationProxyInstance.regexp_match()ObjectAssociationProxyInstance.regexp_replace()ObjectAssociationProxyInstance.remote_attrObjectAssociationProxyInstance.reverse_operate()ObjectAssociationProxyInstance.scalarObjectAssociationProxyInstance.startswith()ObjectAssociationProxyInstance.target_classObjectAssociationProxyInstance.timetuple
ColumnAssociationProxyInstanceColumnAssociationProxyInstance.__le__()ColumnAssociationProxyInstance.__lt__()ColumnAssociationProxyInstance.__ne__()ColumnAssociationProxyInstance.all_()ColumnAssociationProxyInstance.any()ColumnAssociationProxyInstance.any_()ColumnAssociationProxyInstance.asc()ColumnAssociationProxyInstance.attrColumnAssociationProxyInstance.between()ColumnAssociationProxyInstance.bitwise_and()ColumnAssociationProxyInstance.bitwise_lshift()ColumnAssociationProxyInstance.bitwise_not()ColumnAssociationProxyInstance.bitwise_or()ColumnAssociationProxyInstance.bitwise_rshift()ColumnAssociationProxyInstance.bitwise_xor()ColumnAssociationProxyInstance.bool_op()ColumnAssociationProxyInstance.collate()ColumnAssociationProxyInstance.concat()ColumnAssociationProxyInstance.contains()ColumnAssociationProxyInstance.desc()ColumnAssociationProxyInstance.distinct()ColumnAssociationProxyInstance.endswith()ColumnAssociationProxyInstance.has()ColumnAssociationProxyInstance.icontains()ColumnAssociationProxyInstance.iendswith()ColumnAssociationProxyInstance.ilike()ColumnAssociationProxyInstance.in_()ColumnAssociationProxyInstance.is_()ColumnAssociationProxyInstance.is_distinct_from()ColumnAssociationProxyInstance.is_not()ColumnAssociationProxyInstance.is_not_distinct_from()ColumnAssociationProxyInstance.isnot()ColumnAssociationProxyInstance.isnot_distinct_from()ColumnAssociationProxyInstance.istartswith()ColumnAssociationProxyInstance.like()ColumnAssociationProxyInstance.local_attrColumnAssociationProxyInstance.match()ColumnAssociationProxyInstance.not_ilike()ColumnAssociationProxyInstance.not_in()ColumnAssociationProxyInstance.not_like()ColumnAssociationProxyInstance.notilike()ColumnAssociationProxyInstance.notin_()ColumnAssociationProxyInstance.notlike()ColumnAssociationProxyInstance.nulls_first()ColumnAssociationProxyInstance.nulls_last()ColumnAssociationProxyInstance.nullsfirst()ColumnAssociationProxyInstance.nullslast()ColumnAssociationProxyInstance.op()ColumnAssociationProxyInstance.operate()ColumnAssociationProxyInstance.regexp_match()ColumnAssociationProxyInstance.regexp_replace()ColumnAssociationProxyInstance.remote_attrColumnAssociationProxyInstance.reverse_operate()ColumnAssociationProxyInstance.scalarColumnAssociationProxyInstance.startswith()ColumnAssociationProxyInstance.target_classColumnAssociationProxyInstance.timetuple
AssociationProxyExtensionType
- Automap
- Baked Queries
- Deklarative Erweiterungen
- Mypy / Pep-484 Unterstützung für ORM-Mappings
- Mutationsverfolgung
- Sortierungsliste
- Horizontale Sharding
- Hybrid-Attribute
- Indexierbar
- Alternative Klassen-Instrumentierung
- ORM Beispiele
Projektversionen
- Vorher: Asynchrones I/O (asyncio)
- Nächste: Automap
- Oben: Startseite
- Auf dieser Seite
- Assoziationsproxy
- Vereinfachung von Skalaren Sammlungen
- Vereinfachung von Association-Objekten
- Proxy auf Dictionary-basierte Sammlungen
- Zusammengesetzte Association-Proxies
- Abfragen mit Association-Proxies
- Kaskadierendes Skalares Löschen
- Skalare Beziehungen
- API-Dokumentation
association_proxy()AssociationProxyAssociationProxy.__init__()AssociationProxy.cascade_scalar_deletesAssociationProxy.create_on_none_assignmentAssociationProxy.creatorAssociationProxy.extension_typeAssociationProxy.for_class()AssociationProxy.getset_factoryAssociationProxy.infoAssociationProxy.is_aliased_classAssociationProxy.is_attributeAssociationProxy.is_bundleAssociationProxy.is_clause_elementAssociationProxy.is_instanceAssociationProxy.is_mapperAssociationProxy.is_propertyAssociationProxy.is_selectableAssociationProxy.keyAssociationProxy.proxy_bulk_setAssociationProxy.proxy_factoryAssociationProxy.target_collectionAssociationProxy.value_attr
AssociationProxyInstanceAssociationProxyInstance.__eq__()AssociationProxyInstance.__le__()AssociationProxyInstance.__lt__()AssociationProxyInstance.__ne__()AssociationProxyInstance.all_()AssociationProxyInstance.any()AssociationProxyInstance.any_()AssociationProxyInstance.asc()AssociationProxyInstance.attrAssociationProxyInstance.between()AssociationProxyInstance.bitwise_and()AssociationProxyInstance.bitwise_lshift()AssociationProxyInstance.bitwise_not()AssociationProxyInstance.bitwise_or()AssociationProxyInstance.bitwise_rshift()AssociationProxyInstance.bitwise_xor()AssociationProxyInstance.bool_op()AssociationProxyInstance.collate()AssociationProxyInstance.collection_classAssociationProxyInstance.concat()AssociationProxyInstance.contains()AssociationProxyInstance.delete()AssociationProxyInstance.desc()AssociationProxyInstance.distinct()AssociationProxyInstance.endswith()AssociationProxyInstance.for_proxy()AssociationProxyInstance.get()AssociationProxyInstance.has()AssociationProxyInstance.icontains()AssociationProxyInstance.iendswith()AssociationProxyInstance.ilike()AssociationProxyInstance.in_()AssociationProxyInstance.infoAssociationProxyInstance.is_()AssociationProxyInstance.is_distinct_from()AssociationProxyInstance.is_not()AssociationProxyInstance.is_not_distinct_from()AssociationProxyInstance.isnot()AssociationProxyInstance.isnot_distinct_from()AssociationProxyInstance.istartswith()AssociationProxyInstance.like()AssociationProxyInstance.local_attrAssociationProxyInstance.match()AssociationProxyInstance.not_ilike()AssociationProxyInstance.not_in()AssociationProxyInstance.not_like()AssociationProxyInstance.notilike()AssociationProxyInstance.notin_()AssociationProxyInstance.notlike()AssociationProxyInstance.nulls_first()AssociationProxyInstance.nulls_last()AssociationProxyInstance.nullsfirst()AssociationProxyInstance.nullslast()AssociationProxyInstance.op()AssociationProxyInstance.operate()AssociationProxyInstance.parentAssociationProxyInstance.regexp_match()AssociationProxyInstance.regexp_replace()AssociationProxyInstance.remote_attrAssociationProxyInstance.reverse_operate()AssociationProxyInstance.scalarAssociationProxyInstance.set()AssociationProxyInstance.startswith()AssociationProxyInstance.target_classAssociationProxyInstance.timetuple
ObjectAssociationProxyInstanceObjectAssociationProxyInstance.__le__()ObjectAssociationProxyInstance.__lt__()ObjectAssociationProxyInstance.all_()ObjectAssociationProxyInstance.any()ObjectAssociationProxyInstance.any_()ObjectAssociationProxyInstance.asc()ObjectAssociationProxyInstance.attrObjectAssociationProxyInstance.between()ObjectAssociationProxyInstance.bitwise_and()ObjectAssociationProxyInstance.bitwise_lshift()ObjectAssociationProxyInstance.bitwise_not()ObjectAssociationProxyInstance.bitwise_or()ObjectAssociationProxyInstance.bitwise_rshift()ObjectAssociationProxyInstance.bitwise_xor()ObjectAssociationProxyInstance.bool_op()ObjectAssociationProxyInstance.collate()ObjectAssociationProxyInstance.concat()ObjectAssociationProxyInstance.contains()ObjectAssociationProxyInstance.desc()ObjectAssociationProxyInstance.distinct()ObjectAssociationProxyInstance.endswith()ObjectAssociationProxyInstance.has()ObjectAssociationProxyInstance.icontains()ObjectAssociationProxyInstance.iendswith()ObjectAssociationProxyInstance.ilike()ObjectAssociationProxyInstance.in_()ObjectAssociationProxyInstance.is_()ObjectAssociationProxyInstance.is_distinct_from()ObjectAssociationProxyInstance.is_not()ObjectAssociationProxyInstance.is_not_distinct_from()ObjectAssociationProxyInstance.isnot()ObjectAssociationProxyInstance.isnot_distinct_from()ObjectAssociationProxyInstance.istartswith()ObjectAssociationProxyInstance.like()ObjectAssociationProxyInstance.local_attrObjectAssociationProxyInstance.match()ObjectAssociationProxyInstance.not_ilike()ObjectAssociationProxyInstance.not_in()ObjectAssociationProxyInstance.not_like()ObjectAssociationProxyInstance.notilike()ObjectAssociationProxyInstance.notin_()ObjectAssociationProxyInstance.notlike()ObjectAssociationProxyInstance.nulls_first()ObjectAssociationProxyInstance.nulls_last()ObjectAssociationProxyInstance.nullsfirst()ObjectAssociationProxyInstance.nullslast()ObjectAssociationProxyInstance.op()ObjectAssociationProxyInstance.operate()ObjectAssociationProxyInstance.regexp_match()ObjectAssociationProxyInstance.regexp_replace()ObjectAssociationProxyInstance.remote_attrObjectAssociationProxyInstance.reverse_operate()ObjectAssociationProxyInstance.scalarObjectAssociationProxyInstance.startswith()ObjectAssociationProxyInstance.target_classObjectAssociationProxyInstance.timetuple
ColumnAssociationProxyInstanceColumnAssociationProxyInstance.__le__()ColumnAssociationProxyInstance.__lt__()ColumnAssociationProxyInstance.__ne__()ColumnAssociationProxyInstance.all_()ColumnAssociationProxyInstance.any()ColumnAssociationProxyInstance.any_()ColumnAssociationProxyInstance.asc()ColumnAssociationProxyInstance.attrColumnAssociationProxyInstance.between()ColumnAssociationProxyInstance.bitwise_and()ColumnAssociationProxyInstance.bitwise_lshift()ColumnAssociationProxyInstance.bitwise_not()ColumnAssociationProxyInstance.bitwise_or()ColumnAssociationProxyInstance.bitwise_rshift()ColumnAssociationProxyInstance.bitwise_xor()ColumnAssociationProxyInstance.bool_op()ColumnAssociationProxyInstance.collate()ColumnAssociationProxyInstance.concat()ColumnAssociationProxyInstance.contains()ColumnAssociationProxyInstance.desc()ColumnAssociationProxyInstance.distinct()ColumnAssociationProxyInstance.endswith()ColumnAssociationProxyInstance.has()ColumnAssociationProxyInstance.icontains()ColumnAssociationProxyInstance.iendswith()ColumnAssociationProxyInstance.ilike()ColumnAssociationProxyInstance.in_()ColumnAssociationProxyInstance.is_()ColumnAssociationProxyInstance.is_distinct_from()ColumnAssociationProxyInstance.is_not()ColumnAssociationProxyInstance.is_not_distinct_from()ColumnAssociationProxyInstance.isnot()ColumnAssociationProxyInstance.isnot_distinct_from()ColumnAssociationProxyInstance.istartswith()ColumnAssociationProxyInstance.like()ColumnAssociationProxyInstance.local_attrColumnAssociationProxyInstance.match()ColumnAssociationProxyInstance.not_ilike()ColumnAssociationProxyInstance.not_in()ColumnAssociationProxyInstance.not_like()ColumnAssociationProxyInstance.notilike()ColumnAssociationProxyInstance.notin_()ColumnAssociationProxyInstance.notlike()ColumnAssociationProxyInstance.nulls_first()ColumnAssociationProxyInstance.nulls_last()ColumnAssociationProxyInstance.nullsfirst()ColumnAssociationProxyInstance.nullslast()ColumnAssociationProxyInstance.op()ColumnAssociationProxyInstance.operate()ColumnAssociationProxyInstance.regexp_match()ColumnAssociationProxyInstance.regexp_replace()ColumnAssociationProxyInstance.remote_attrColumnAssociationProxyInstance.reverse_operate()ColumnAssociationProxyInstance.scalarColumnAssociationProxyInstance.startswith()ColumnAssociationProxyInstance.target_classColumnAssociationProxyInstance.timetuple
AssociationProxyExtensionType
Association Proxy¶
associationproxy wird verwendet, um eine Lese-/Schreibansicht eines Zielattributs über eine Beziehung zu erstellen. Es verbirgt im Wesentlichen die Verwendung eines "mittleren" Attributs zwischen zwei Endpunkten und kann verwendet werden, um Felder aus einer Sammlung von verwandten Objekten oder einem skalaren Beziehung auszuwählen. oder um die Wortkargheit der Verwendung des Association-Objekt-Musters zu reduzieren. Kreativ angewendet, ermöglicht der Association-Proxy den Aufbau komplexer Sammlungen und Dictionary-Ansichten praktisch jeder Geometrie, die mithilfe von Standard- und transparent konfigurierten relationalen Mustern in der Datenbank gespeichert wird.
Vereinfachung von Skalaren Sammlungen¶
Betrachten Sie eine Many-to-Many-Zuordnung zwischen zwei Klassen, User und Keyword. Jeder User kann eine beliebige Anzahl von Keyword -Objekten haben und umgekehrt (das Many-to-Many-Muster wird unter Many To Many beschrieben). Das obige Beispiel illustriert dieses Muster auf dieselbe Weise, mit Ausnahme eines zusätzlichen Attributs, das der User -Klasse namens User.keywords hinzugefügt wurde.
from __future__ import annotations
from typing import Final
from typing import List
from sqlalchemy import Column
from sqlalchemy import ForeignKey
from sqlalchemy import Integer
from sqlalchemy import String
from sqlalchemy import Table
from sqlalchemy.orm import DeclarativeBase
from sqlalchemy.orm import Mapped
from sqlalchemy.orm import mapped_column
from sqlalchemy.orm import relationship
from sqlalchemy.ext.associationproxy import association_proxy
from sqlalchemy.ext.associationproxy import AssociationProxy
class Base(DeclarativeBase):
pass
class User(Base):
__tablename__ = "user"
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str] = mapped_column(String(64))
kw: Mapped[List[Keyword]] = relationship(secondary=lambda: user_keyword_table)
def __init__(self, name: str):
self.name = name
# proxy the 'keyword' attribute from the 'kw' relationship
keywords: AssociationProxy[List[str]] = association_proxy("kw", "keyword")
class Keyword(Base):
__tablename__ = "keyword"
id: Mapped[int] = mapped_column(primary_key=True)
keyword: Mapped[str] = mapped_column(String(64))
def __init__(self, keyword: str):
self.keyword = keyword
user_keyword_table: Final[Table] = Table(
"user_keyword",
Base.metadata,
Column("user_id", Integer, ForeignKey("user.id"), primary_key=True),
Column("keyword_id", Integer, ForeignKey("keyword.id"), primary_key=True),
)Im obigen Beispiel wird association_proxy() auf die User -Klasse angewendet, um eine "Ansicht" der kw -Beziehung zu erzeugen, die den Zeichenkettenwert von .keyword, der jedem Keyword -Objekt zugeordnet ist, offenlegt. Außerdem werden neue Keyword -Objekte transparent erstellt, wenn Zeichenketten zur Sammlung hinzugefügt werden.
>>> user = User("jek")
>>> user.keywords.append("cheese-inspector")
>>> user.keywords.append("snack-ninja")
>>> print(user.keywords)
['cheese-inspector', 'snack-ninja']Um die Mechanik zu verstehen, überprüfen Sie zuerst das Verhalten von User und Keyword, ohne den .keywords Association-Proxy zu verwenden. Normalerweise erfordert das Lesen und Bearbeiten der Sammlung von "Schlüsselwort"-Zeichenketten, die mit User verbunden sind, eine Durchquerung von jedem Sammlungselement zum Attribut .keyword, was umständlich sein kann. Das folgende Beispiel illustriert dieselbe Reihe von Operationen ohne die Verwendung des Association-Proxys.
>>> # identical operations without using the association proxy
>>> user = User("jek")
>>> user.kw.append(Keyword("cheese-inspector"))
>>> user.kw.append(Keyword("snack-ninja"))
>>> print([keyword.keyword for keyword in user.kw])
['cheese-inspector', 'snack-ninja']Das von der Funktion association_proxy() erzeugte AssociationProxy -Objekt ist eine Instanz eines Python-Deskriptors und wird in keiner Weise von dem Mapper als "gemappt" betrachtet. Daher wird er immer innerhalb der Klassendefinition der gemappten Klasse inline angegeben, unabhängig davon, ob Deklarative oder Imperative Mappings verwendet werden.
Der Proxy funktioniert, indem er auf das zugrunde liegende gemappte Attribut oder die Sammlung als Reaktion auf Operationen zugreift, und Änderungen, die über den Proxy vorgenommen werden, sind sofort im gemappten Attribut sichtbar, ebenso wie umgekehrt. Das zugrunde liegende Attribut bleibt vollständig zugänglich.
Bei der ersten Verwendung führt der Association-Proxy Introspektionsoperationen an der Zielsammlung durch, damit sein Verhalten korrekt übereinstimmt. Details wie die Tatsache, ob das lokal proxy-gebundene Attribut eine Sammlung (wie üblich) oder eine skalare Referenz ist, sowie ob die Sammlung wie ein Set, eine Liste oder ein Dictionary funktioniert, werden berücksichtigt, sodass der Proxy sich genauso verhalten sollte wie die zugrunde liegende Sammlung oder das Attribut.
Erstellung neuer Werte¶
Wenn ein Listen- append() -Ereignis (oder ein Set- add() -, Dictionary- __setitem__() - oder skalare Zuweisungsereignis) vom Association-Proxy abgefangen wird, instanziiert er ein neues Exemplar des "Zwischenobjekts" mit seinem Konstruktor und übergibt den gegebenen Wert als einziges Argument. In unserem obigen Beispiel wird eine Operation wie
user.keywords.append("cheese-inspector")wird vom Association-Proxy in die Operation übersetzt
user.kw.append(Keyword("cheese-inspector"))Das Beispiel funktioniert hier, weil wir den Konstruktor für Keyword so konzipiert haben, dass er ein einzelnes positionsgebundenes Argument, keyword, akzeptiert. Für Fälle, in denen ein Konstruktor mit einem Argument nicht machbar ist, kann das Erstellungsverhalten des Association-Proxys mithilfe des Arguments association_proxy.creator angepasst werden, das auf einen aufrufbaren Wert (d. h. eine Python-Funktion) verweist, der eine neue Objektinstanz unter Angabe des einzelnen Arguments erzeugt. Unten illustrieren wir dies typischerweise mit einem Lambda.
class User(Base):
...
# use Keyword(keyword=kw) on append() events
keywords: AssociationProxy[List[str]] = association_proxy(
"kw", "keyword", creator=lambda kw: Keyword(keyword=kw)
)Die creator -Funktion akzeptiert ein einzelnes Argument im Falle einer Listen- oder Set-basierten Sammlung oder eines skalaren Attributs. Im Falle einer Dictionary-basierten Sammlung akzeptiert sie zwei Argumente, "key" und "value". Ein Beispiel hierfür finden Sie unten unter Proxy auf Dictionary-basierte Sammlungen.
Vereinfachung von Association-Objekten¶
Das "Association-Objekt"-Muster ist eine erweiterte Form einer Many-to-Many-Beziehung und wird unter Association Object beschrieben. Association-Proxies sind nützlich, um "Association-Objekte" während des normalen Gebrauchs aus dem Weg zu halten.
Angenommen, unsere user_keyword -Tabelle hätte zusätzliche Spalten, die wir explizit zuordnen möchten, aber in den meisten Fällen benötigen wir keinen direkten Zugriff auf diese Attribute. Unten illustrieren wir eine neue Zuordnung, die die Klasse UserKeywordAssociation einführt, die der zuvor gezeigten user_keyword -Tabelle zugeordnet ist. Diese Klasse fügt eine zusätzliche Spalte special_key hinzu, ein Wert, auf den wir gelegentlich zugreifen möchten, aber nicht im üblichen Fall. Wir erstellen einen Association-Proxy für die User -Klasse namens keywords, der die Lücke von der user_keyword_associations -Sammlung von User zum Attribut .keyword, das auf jedem UserKeywordAssociation vorhanden ist, überbrückt.
from __future__ import annotations
from typing import List
from typing import Optional
from sqlalchemy import ForeignKey
from sqlalchemy import String
from sqlalchemy.ext.associationproxy import association_proxy
from sqlalchemy.ext.associationproxy import AssociationProxy
from sqlalchemy.orm import DeclarativeBase
from sqlalchemy.orm import Mapped
from sqlalchemy.orm import mapped_column
from sqlalchemy.orm import relationship
class Base(DeclarativeBase):
pass
class User(Base):
__tablename__ = "user"
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str] = mapped_column(String(64))
user_keyword_associations: Mapped[List[UserKeywordAssociation]] = relationship(
back_populates="user",
cascade="all, delete-orphan",
)
# association proxy of "user_keyword_associations" collection
# to "keyword" attribute
keywords: AssociationProxy[List[Keyword]] = association_proxy(
"user_keyword_associations",
"keyword",
creator=lambda keyword_obj: UserKeywordAssociation(keyword=keyword_obj),
)
def __init__(self, name: str):
self.name = name
class UserKeywordAssociation(Base):
__tablename__ = "user_keyword"
user_id: Mapped[int] = mapped_column(ForeignKey("user.id"), primary_key=True)
keyword_id: Mapped[int] = mapped_column(ForeignKey("keyword.id"), primary_key=True)
special_key: Mapped[Optional[str]] = mapped_column(String(50))
user: Mapped[User] = relationship(back_populates="user_keyword_associations")
keyword: Mapped[Keyword] = relationship()
class Keyword(Base):
__tablename__ = "keyword"
id: Mapped[int] = mapped_column(primary_key=True)
keyword: Mapped[str] = mapped_column("keyword", String(64))
def __init__(self, keyword: str):
self.keyword = keyword
def __repr__(self) -> str:
return f"Keyword({self.keyword!r})"Mit der obigen Konfiguration können wir auf die .keywords -Sammlung jedes User -Objekts zugreifen, wobei jedes eine Sammlung von Keyword -Objekten offenbart, die aus den zugrunde liegenden UserKeywordAssociation -Elementen stammen.
>>> user = User("log")
>>> for kw in (Keyword("new_from_blammo"), Keyword("its_big")):
... user.keywords.append(kw)
>>> print(user.keywords)
[Keyword('new_from_blammo'), Keyword('its_big')]Dieses Beispiel steht im Gegensatz zu dem zuvor unter Vereinfachung von Skalaren Sammlungen gezeigten Beispiel, bei dem der Association-Proxy eine Sammlung von Zeichenketten und nicht eine Sammlung von zusammengesetzten Objekten offenbart. In diesem Fall ist jede .keywords.append() -Operation äquivalent zu
>>> user.user_keyword_associations.append(
... UserKeywordAssociation(keyword=Keyword("its_heavy"))
... )Das UserKeywordAssociation -Objekt hat zwei Attribute, die beide im Geltungsbereich der append() -Operation des Association-Proxys befüllt werden; .keyword, das sich auf das Keyword -Objekt bezieht, und .user, das sich auf das User -Objekt bezieht. Das Attribut .keyword wird zuerst befüllt, da der Association-Proxy ein neues UserKeywordAssociation -Objekt als Reaktion auf die .append() -Operation generiert und die gegebene Keyword -Instanz dem Attribut .keyword zuweist. Dann, da das UserKeywordAssociation -Objekt der User.user_keyword_associations -Sammlung hinzugefügt wird, wird das Attribut UserKeywordAssociation.user, das als back_populates für User.user_keyword_associations konfiguriert ist, bei der gegebenen UserKeywordAssociation -Instanz initialisiert, um auf das übergeordnete User -Objekt zu verweisen, das die Append-Operation empfängt. Das Argument special_key oben bleibt auf seinem Standardwert von None.
Für die Fälle, in denen wir möchten, dass special_key einen Wert hat, erstellen wir das UserKeywordAssociation -Objekt explizit. Unten weisen wir alle drei Attribute zu, wobei die Zuweisung von .user während der Konstruktion die Auswirkung hat, dass das neue UserKeywordAssociation der User.user_keyword_associations -Sammlung hinzugefügt wird (über die Beziehung).
>>> UserKeywordAssociation(
... keyword=Keyword("its_wood"), user=user, special_key="my special key"
... )Der Association-Proxy gibt uns eine Sammlung von Keyword -Objekten zurück, die durch all diese Operationen repräsentiert werden.
>>> print(user.keywords)
[Keyword('new_from_blammo'), Keyword('its_big'), Keyword('its_heavy'), Keyword('its_wood')]Proxy auf Dictionary-basierte Sammlungen¶
Der Association-Proxy kann auch auf Dictionary-basierte Sammlungen angewendet werden. SQLAlchemy-Mappings verwenden üblicherweise den Sammlungstyp attribute_keyed_dict(), um Dictionary-Sammlungen zu erstellen, sowie die erweiterten Techniken, die unter Benutzerdefinierte Dictionary-basierte Sammlungen beschrieben sind.
Der Association-Proxy passt sein Verhalten an, wenn er die Verwendung einer Dictionary-basierten Sammlung erkennt. Wenn neue Werte dem Dictionary hinzugefügt werden, instanziiert der Association-Proxy das Zwischenobjekt, indem er zwei Argumente an die Erstellungsfunktion übergibt statt eines: den Schlüssel und den Wert. Wie immer ist diese Erstellungsfunktion standardmäßig der Konstruktor der Zwischenklasse und kann mit dem Argument creator angepasst werden.
Unten modifizieren wir unser UserKeywordAssociation -Beispiel so, dass die User.user_keyword_associations -Sammlung nun mithilfe eines Dictionaries zugeordnet wird, wobei das Argument UserKeywordAssociation.special_key als Schlüssel für das Dictionary verwendet wird. Wir wenden auch ein creator -Argument auf den User.keywords -Proxy an, damit diese Werte ordnungsgemäß zugewiesen werden, wenn neue Elemente zum Dictionary hinzugefügt werden.
from __future__ import annotations
from typing import Dict
from sqlalchemy import ForeignKey
from sqlalchemy import String
from sqlalchemy.ext.associationproxy import association_proxy
from sqlalchemy.ext.associationproxy import AssociationProxy
from sqlalchemy.orm import DeclarativeBase
from sqlalchemy.orm import Mapped
from sqlalchemy.orm import mapped_column
from sqlalchemy.orm import relationship
from sqlalchemy.orm.collections import attribute_keyed_dict
class Base(DeclarativeBase):
pass
class User(Base):
__tablename__ = "user"
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str] = mapped_column(String(64))
# user/user_keyword_associations relationship, mapping
# user_keyword_associations with a dictionary against "special_key" as key.
user_keyword_associations: Mapped[Dict[str, UserKeywordAssociation]] = relationship(
back_populates="user",
collection_class=attribute_keyed_dict("special_key"),
cascade="all, delete-orphan",
)
# proxy to 'user_keyword_associations', instantiating
# UserKeywordAssociation assigning the new key to 'special_key',
# values to 'keyword'.
keywords: AssociationProxy[Dict[str, Keyword]] = association_proxy(
"user_keyword_associations",
"keyword",
creator=lambda k, v: UserKeywordAssociation(special_key=k, keyword=v),
)
def __init__(self, name: str):
self.name = name
class UserKeywordAssociation(Base):
__tablename__ = "user_keyword"
user_id: Mapped[int] = mapped_column(ForeignKey("user.id"), primary_key=True)
keyword_id: Mapped[int] = mapped_column(ForeignKey("keyword.id"), primary_key=True)
special_key: Mapped[str]
user: Mapped[User] = relationship(
back_populates="user_keyword_associations",
)
keyword: Mapped[Keyword] = relationship()
class Keyword(Base):
__tablename__ = "keyword"
id: Mapped[int] = mapped_column(primary_key=True)
keyword: Mapped[str] = mapped_column(String(64))
def __init__(self, keyword: str):
self.keyword = keyword
def __repr__(self) -> str:
return f"Keyword({self.keyword!r})"Wir illustrieren die .keywords -Sammlung als Dictionary, das den UserKeywordAssociation.special_key -Wert dem Keyword -Objekt zuordnet.
>>> user = User("log")
>>> user.keywords["sk1"] = Keyword("kw1")
>>> user.keywords["sk2"] = Keyword("kw2")
>>> print(user.keywords)
{'sk1': Keyword('kw1'), 'sk2': Keyword('kw2')}Zusammengesetzte Association-Proxies¶
Angesichts unserer früheren Beispiele für das Proxying von Beziehungen zu skalaren Attributen, über Association-Objekte und für Dictionaries können wir alle drei Techniken kombinieren, um User ein keywords -Dictionary zur Verfügung zu stellen, das streng mit dem Zeichenkettenwert von special_key zugeordnet zu der Zeichenkette keyword umgeht. Sowohl die Klassen UserKeywordAssociation als auch Keyword sind vollständig verborgen. Dies wird erreicht, indem ein Association-Proxy auf User aufgebaut wird, der auf einen Association-Proxy auf UserKeywordAssociation verweist.
from __future__ import annotations
from sqlalchemy import ForeignKey
from sqlalchemy import String
from sqlalchemy.ext.associationproxy import association_proxy
from sqlalchemy.ext.associationproxy import AssociationProxy
from sqlalchemy.orm import DeclarativeBase
from sqlalchemy.orm import Mapped
from sqlalchemy.orm import mapped_column
from sqlalchemy.orm import relationship
from sqlalchemy.orm.collections import attribute_keyed_dict
class Base(DeclarativeBase):
pass
class User(Base):
__tablename__ = "user"
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str] = mapped_column(String(64))
user_keyword_associations: Mapped[Dict[str, UserKeywordAssociation]] = relationship(
back_populates="user",
collection_class=attribute_keyed_dict("special_key"),
cascade="all, delete-orphan",
)
# the same 'user_keyword_associations'->'keyword' proxy as in
# the basic dictionary example.
keywords: AssociationProxy[Dict[str, str]] = association_proxy(
"user_keyword_associations",
"keyword",
creator=lambda k, v: UserKeywordAssociation(special_key=k, keyword=v),
)
def __init__(self, name: str):
self.name = name
class UserKeywordAssociation(Base):
__tablename__ = "user_keyword"
user_id: Mapped[int] = mapped_column(ForeignKey("user.id"), primary_key=True)
keyword_id: Mapped[int] = mapped_column(ForeignKey("keyword.id"), primary_key=True)
special_key: Mapped[str] = mapped_column(String(64))
user: Mapped[User] = relationship(
back_populates="user_keyword_associations",
)
# the relationship to Keyword is now called
# 'kw'
kw: Mapped[Keyword] = relationship()
# 'keyword' is changed to be a proxy to the
# 'keyword' attribute of 'Keyword'
keyword: AssociationProxy[Dict[str, str]] = association_proxy("kw", "keyword")
class Keyword(Base):
__tablename__ = "keyword"
id: Mapped[int] = mapped_column(primary_key=True)
keyword: Mapped[str] = mapped_column(String(64))
def __init__(self, keyword: str):
self.keyword = keywordUser.keywords ist jetzt ein Dictionary von Zeichenkette zu Zeichenkette, wobei UserKeywordAssociation - und Keyword -Objekte transparent für uns mithilfe des Association-Proxys erstellt und entfernt werden. Im folgenden Beispiel illustrieren wir die Verwendung des Zuweisungsoperators, der ebenfalls vom Association-Proxy ordnungsgemäß behandelt wird, um einem Sammlungswert auf einmal ein Dictionary zuzuweisen.
>>> user = User("log")
>>> user.keywords = {"sk1": "kw1", "sk2": "kw2"}
>>> print(user.keywords)
{'sk1': 'kw1', 'sk2': 'kw2'}
>>> user.keywords["sk3"] = "kw3"
>>> del user.keywords["sk2"]
>>> print(user.keywords)
{'sk1': 'kw1', 'sk3': 'kw3'}
>>> # illustrate un-proxied usage
... print(user.user_keyword_associations["sk3"].kw)
<__main__.Keyword object at 0x12ceb90>Ein Vorbehalt bei unserem obigen Beispiel ist, dass, da Keyword -Objekte für jede Dictionary-Set-Operation erstellt werden, das Beispiel die Eindeutigkeit der Keyword -Objekte anhand ihres Zeichenkettennamens nicht beibehält, was eine typische Anforderung für ein Tagging-Szenario wie dieses ist. Für diesen Anwendungsfall wird das Rezept UniqueObject oder eine vergleichbare Erstellungsstrategie empfohlen, die eine "erst suchen, dann erstellen"-Strategie auf den Konstruktor der Keyword -Klasse anwendet, sodass ein bereits vorhandenes Keyword zurückgegeben wird, wenn der gegebene Name bereits vorhanden ist.
Abfragen mit Association-Proxies¶
Der AssociationProxy bietet einfache SQL-Konstruktionsfähigkeiten, die auf Klassenebene ähnlich wie andere ORM-gemappte Attribute funktionieren und rudimentäre Filterunterstützung bieten, hauptsächlich basierend auf dem SQL-Schlüsselwort EXISTS.
Hinweis
Der Hauptzweck der Association-Proxy-Erweiterung ist es, verbesserte Persistenz- und Objektzugriffsmuster mit bereits geladenen gemappten Objektinstanzen zu ermöglichen. Die klassenbezogene Abfragefunktion ist von begrenztem Nutzen und wird nicht den Bedarf ersetzen, auf die zugrunde liegenden Attribute beim Konstruieren von SQL-Abfragen mit JOINs, eager loading-Optionen usw. zu verweisen.
Für diesen Abschnitt nehmen wir eine Klasse mit sowohl einem Association-Proxy an, der auf eine Spalte verweist, als auch einem Association-Proxy, der auf ein verwandtes Objekt verweist, wie in der folgenden Beispielzuordnung.
from __future__ import annotations
from sqlalchemy import Column, ForeignKey, Integer, String
from sqlalchemy.ext.associationproxy import association_proxy, AssociationProxy
from sqlalchemy.orm import DeclarativeBase, relationship
from sqlalchemy.orm.collections import attribute_keyed_dict
from sqlalchemy.orm.collections import Mapped
class Base(DeclarativeBase):
pass
class User(Base):
__tablename__ = "user"
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str] = mapped_column(String(64))
user_keyword_associations: Mapped[UserKeywordAssociation] = relationship(
cascade="all, delete-orphan",
)
# object-targeted association proxy
keywords: AssociationProxy[List[Keyword]] = association_proxy(
"user_keyword_associations",
"keyword",
)
# column-targeted association proxy
special_keys: AssociationProxy[List[str]] = association_proxy(
"user_keyword_associations", "special_key"
)
class UserKeywordAssociation(Base):
__tablename__ = "user_keyword"
user_id: Mapped[int] = mapped_column(ForeignKey("user.id"), primary_key=True)
keyword_id: Mapped[int] = mapped_column(ForeignKey("keyword.id"), primary_key=True)
special_key: Mapped[str] = mapped_column(String(64))
keyword: Mapped[Keyword] = relationship()
class Keyword(Base):
__tablename__ = "keyword"
id: Mapped[int] = mapped_column(primary_key=True)
keyword: Mapped[str] = mapped_column(String(64))Die generierte SQL nimmt die Form einer korrelierten Unterabfrage gegen den EXISTS-SQL-Operator an, sodass sie in einer WHERE-Klausel verwendet werden kann, ohne dass zusätzliche Modifikationen an der umgebenden Abfrage erforderlich sind. Wenn das unmittelbare Ziel eines Association-Proxys ein **gemappter Spaltenausdruck** ist, können Standard-Spaltenoperatoren verwendet werden, die in die Unterabfrage eingebettet werden. Zum Beispiel ein einfacher Gleichheitsoperator
>>> print(session.scalars(select(User).where(User.special_keys == "jek")))
SELECT "user".id AS user_id, "user".name AS user_name
FROM "user"
WHERE EXISTS (SELECT 1
FROM user_keyword
WHERE "user".id = user_keyword.user_id AND user_keyword.special_key = :special_key_1)
ein LIKE-Operator
>>> print(session.scalars(select(User).where(User.special_keys.like("%jek"))))
SELECT "user".id AS user_id, "user".name AS user_name
FROM "user"
WHERE EXISTS (SELECT 1
FROM user_keyword
WHERE "user".id = user_keyword.user_id AND user_keyword.special_key LIKE :special_key_1)
Für Association-Proxies, bei denen das unmittelbare Ziel ein **verwandtes Objekt oder eine Sammlung, oder ein anderer Association-Proxy oder ein Attribut des verwandten Objekts** ist, können stattdessen beziehungsorientierte Operatoren verwendet werden, wie z. B. PropComparator.has() und PropComparator.any(). Das Attribut User.keywords ist tatsächlich zwei Association-Proxies, die miteinander verbunden sind. Wenn wir diesen Proxy also zur Generierung von SQL-Phrasen verwenden, erhalten wir zwei Ebenen von EXISTS-Unterabfragen.
>>> print(session.scalars(select(User).where(User.keywords.any(Keyword.keyword == "jek"))))
SELECT "user".id AS user_id, "user".name AS user_name
FROM "user"
WHERE EXISTS (SELECT 1
FROM user_keyword
WHERE "user".id = user_keyword.user_id AND (EXISTS (SELECT 1
FROM keyword
WHERE keyword.id = user_keyword.keyword_id AND keyword.keyword = :keyword_1)))
Dies ist nicht die effizienteste Form von SQL. Daher können Association-Proxies zwar bequem zum schnellen Generieren von WHERE-Kriterien sein, aber SQL-Ergebnisse sollten inspiziert und in explizite JOIN-Kriterien "entrollt" werden, um sie optimal zu nutzen, insbesondere beim Verketten von Association-Proxies.
Geändert in Version 1.3: Association-Proxy bietet nun standardmäßige Spaltenoperatoren für ein spaltenorientiertes Ziel. Siehe AssociationProxy bietet nun standardmäßige Spaltenoperatoren für ein spaltenorientiertes Ziel.
Kaskadierendes Skalares Löschen¶
Neu in Version 1.3.
Gegeben eine Zuordnung als
from __future__ import annotations
from sqlalchemy import Column, ForeignKey, Integer, String
from sqlalchemy.ext.associationproxy import association_proxy, AssociationProxy
from sqlalchemy.orm import DeclarativeBase, relationship
from sqlalchemy.orm.collections import attribute_keyed_dict
from sqlalchemy.orm.collections import Mapped
class Base(DeclarativeBase):
pass
class A(Base):
__tablename__ = "test_a"
id: Mapped[int] = mapped_column(primary_key=True)
ab: Mapped[AB] = relationship(uselist=False)
b: AssociationProxy[B] = association_proxy(
"ab", "b", creator=lambda b: AB(b=b), cascade_scalar_deletes=True
)
class B(Base):
__tablename__ = "test_b"
id: Mapped[int] = mapped_column(primary_key=True)
class AB(Base):
__tablename__ = "test_ab"
a_id: Mapped[int] = mapped_column(ForeignKey(A.id), primary_key=True)
b_id: Mapped[int] = mapped_column(ForeignKey(B.id), primary_key=True)
b: Mapped[B] = relationship()Eine Zuweisung an A.b generiert ein AB -Objekt.
a.b = B()Die A.b -Assoziation ist skalar und beinhaltet die Verwendung des Parameters AssociationProxy.cascade_scalar_deletes. Wenn dieser Parameter aktiviert ist, entfernt das Setzen von A.b auf None auch A.ab.
a.b = None
assert a.ab is NoneWenn AssociationProxy.cascade_scalar_deletes nicht gesetzt ist, würde das Association-Objekt a.ab oben bestehen bleiben.
Beachten Sie, dass dies nicht das Verhalten für sammlungsbasierte Association-Proxies ist; in diesem Fall wird das zwischengeschaltete Association-Objekt immer entfernt, wenn Mitglieder der proxy-gebundenen Sammlung entfernt werden. Ob die Zeile gelöscht wird oder nicht, hängt von der Kaskadeneinstellung der Beziehung ab.
Siehe auch
Skalare Beziehungen¶
Das folgende Beispiel illustriert die Verwendung des Association-Proxys auf der "many"-Seite einer One-to-Many-Beziehung, die auf Attribute eines skalaren Objekts zugreift.
from __future__ import annotations
from typing import List
from sqlalchemy import ForeignKey
from sqlalchemy import String
from sqlalchemy.ext.associationproxy import association_proxy
from sqlalchemy.ext.associationproxy import AssociationProxy
from sqlalchemy.orm import DeclarativeBase
from sqlalchemy.orm import Mapped
from sqlalchemy.orm import mapped_column
from sqlalchemy.orm import relationship
class Base(DeclarativeBase):
pass
class Recipe(Base):
__tablename__ = "recipe"
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str] = mapped_column(String(64))
steps: Mapped[List[Step]] = relationship(back_populates="recipe")
step_descriptions: AssociationProxy[List[str]] = association_proxy(
"steps", "description"
)
class Step(Base):
__tablename__ = "step"
id: Mapped[int] = mapped_column(primary_key=True)
description: Mapped[str]
recipe_id: Mapped[int] = mapped_column(ForeignKey("recipe.id"))
recipe: Mapped[Recipe] = relationship(back_populates="steps")
recipe_name: AssociationProxy[str] = association_proxy("recipe", "name")
def __init__(self, description: str) -> None:
self.description = description
my_snack = Recipe(
name="afternoon snack",
step_descriptions=[
"slice bread",
"spread peanut butted",
"eat sandwich",
],
)Eine Zusammenfassung der Schritte von my_snack kann mit folgendem gedruckt werden:
>>> for i, step in enumerate(my_snack.steps, 1):
... print(f"Step {i} of {step.recipe_name!r}: {step.description}")
Step 1 of 'afternoon snack': slice bread
Step 2 of 'afternoon snack': spread peanut butted
Step 3 of 'afternoon snack': eat sandwichAPI-Dokumentation¶
| Objektname | Beschreibung |
|---|---|
association_proxy(target_collection, attr, *, [creator, getset_factory, proxy_factory, proxy_bulk_set, info, cascade_scalar_deletes, create_on_none_assignment, init, repr, default, default_factory, compare, kw_only, hash]) |
Gibt eine Python-Eigenschaft zurück, die eine Ansicht eines Zielattributs implementiert, das auf ein Attribut von Mitgliedern des Ziels verweist. |
Ein Deskriptor, der eine Lese-/Schreibansicht eines Objektattributs präsentiert. |
|
Eine Aufzählung. |
|
Ein pro-Klasse-Objekt, das klassen- und objektspezifische Ergebnisse liefert. |
|
eine |
|
eine |
- funktion sqlalchemy.ext.associationproxy.association_proxy(target_collection: str, attr: str, *, creator: _CreatorProtocol | None = None, getset_factory: _GetSetFactoryProtocol | None = None, proxy_factory: _ProxyFactoryProtocol | None = None, proxy_bulk_set: _ProxyBulkSetProtocol | None = None, info: _InfoType | None = None, cascade_scalar_deletes: bool = False, create_on_none_assignment: bool = False, 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) → AssociationProxy[Any]¶
Gibt eine Python-Eigenschaft zurück, die eine Ansicht eines Zielattributs implementiert, das auf ein Attribut von Mitgliedern des Ziels verweist.
Der zurückgegebene Wert ist eine Instanz von
AssociationProxy.Implementiert eine Python-Eigenschaft, die eine Beziehung als Sammlung einfacher Werte oder als Skalarwert darstellt. Die durchgesteuerte Eigenschaft ahmt den Sammlungstyp des Ziels (Liste, Wörterbuch oder Menge) nach, oder im Falle einer Eins-zu-Eins-Beziehung einen einfachen Skalarwert.
- Parameter:
target_collection¶ – Name des Attributs, das das unmittelbare Ziel ist. Dieses Attribut wird typischerweise von
relationship()gemappt, um sich mit einer Zielsammlung zu verbinden, kann aber auch eine Many-to-One- oder eine nicht-skalare Beziehung sein.attr¶ – Attribut auf der zugeordneten Instanz oder den zugeordneten Instanzen, das auf Instanzen des Zielobjekts verfügbar ist.
creator¶ –
optional.
Definiert benutzerdefiniertes Verhalten, wenn neue Elemente zur durchgesteuerten Sammlung hinzugefügt werden.
Standardmäßig löst das Hinzufügen neuer Elemente zur Sammlung die Erstellung einer Instanz des Zielobjekts aus, wobei das gegebene Element als Positionsargument an den Zielkonstruktor übergeben wird. Für Fälle, in denen dies nicht ausreicht, kann
association_proxy.creatoreinen aufrufbaren Wert bereitstellen, der das Objekt auf die entsprechende Weise konstruiert, gegeben das übergebene Element.Für Listen- und Mengen-orientierte Sammlungen wird ein einzelnes Argument an die aufrufbare Funktion übergeben. Für Wörterbuch-orientierte Sammlungen werden zwei Argumente übergeben, die dem Schlüssel und dem Wert entsprechen.
Der aufrufbare Wert
association_proxy.creatorwird auch für skalare (d. h. Many-to-One, One-to-One) Beziehungen aufgerufen. Wenn der aktuelle Wert des ZielbeziehungsattributsNoneist, wird die aufrufbare Funktion verwendet, um ein neues Objekt zu erstellen. Wenn bereits ein Objektwert vorhanden ist, wird der gegebene Attributwert in dieses Objekt geschrieben.Siehe auch
cascade_scalar_deletes¶ –
wenn True, zeigt an, dass das Setzen des durchgesteuerten Werts auf
Noneoder das Löschen überdelauch das Quellobjekt entfernen sollte. Gilt nur für skalare Attribute. Normalerweise entfernt das Entfernen des durchgesteuerten Ziels nicht das Proxy-Quellobjekt, da dieses Objekt möglicherweise weitere Zustände hat, die noch beibehalten werden sollen.Neu in Version 1.3.
Siehe auch
Kaskadierendes Löschen von Skalaren - vollständiges Anwendungsbeispiel
create_on_none_assignment¶ –
wenn True, zeigt an, dass das Setzen des durchgesteuerten Werts auf
Nonedas Quellobjekt **erstellen** sollte, wenn es nicht existiert, unter Verwendung des Erstellers. Gilt nur für skalare Attribute. Dies ist gegenseitig ausschließend gegenüberassocation_proxy.cascade_scalar_deletes.Neu in Version 2.0.18.
init¶ –
Speziell für Deklarative Dataclass-Abbildung gibt an, ob das zugeordnete Attribut Teil der
__init__()-Methode sein soll, wie sie vom Dataclass-Prozess generiert wird.Neu ab Version 2.0.0b4.
repr¶ –
Speziell für Deklarative Dataclass-Abbildung gibt an, ob das durch dieses
AssociationProxyeingerichtete Attribut Teil der__repr__()-Methode sein soll, wie sie vom Dataclass-Prozess generiert wird.Neu ab Version 2.0.0b4.
default_factory¶ –
Speziell für Deklarative Dataclass-Abbildung gibt eine Standardwert-Generierungsfunktion an, die als Teil der
__init__()-Methode ausgeführt wird, wie sie vom Dataclass-Prozess generiert wird.Neu ab Version 2.0.0b4.
compare¶ –
Speziell für Deklarative Dataclass-Abbildung 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¶ –
Speziell für Deklarative Dataclass-Abbildung gibt an, ob dieses Feld als nur-Schlüsselwort-Argument bei der Generierung der
__init__()-Methode durch den Dataclass-Prozess markiert werden soll.Neu ab Version 2.0.0b4.
hash¶ –
Speziell für Deklarative Dataclass-Abbildung steuert, ob dieses Feld bei der Generierung der
__hash__()-Methode für die zugeordnete Klasse einbezogen wird.Neu in Version 2.0.36.
info¶ – optional, wird
AssociationProxy.infozugewiesen, falls vorhanden.
Die folgenden zusätzlichen Parameter beinhalten die Injektion benutzerdefinierter Verhaltensweisen innerhalb des
AssociationProxy-Objekts und sind nur für fortgeschrittene Anwendungsfälle gedacht.- Parameter:
getset_factory¶ –
Optional. Der Zugriff auf durchgesteuerte Attribute wird automatisch von Routinen gehandhabt, die Werte basierend auf dem attr-Argument für diesen Proxy abrufen und setzen.
Wenn Sie dieses Verhalten anpassen möchten, können Sie eine getset_factory-Aufruffunktion bereitstellen, die ein Tupel von getter- und setter-Funktionen erzeugt. Die Fabrik wird mit zwei Argumenten aufgerufen: dem abstrakten Typ der zugrunde liegenden Sammlung und dieser Proxy-Instanz.
proxy_factory¶ – Optional. Der Typ der zu emulierenden Sammlung wird durch Abtasten der Zielsammlung bestimmt. Wenn Ihr Sammlungstyp nicht durch Duck-Typing bestimmt werden kann oder Sie eine andere Implementierung der Sammlung verwenden möchten, können Sie eine Fabrikfunktion bereitstellen, um diese Sammlungen zu erzeugen. Nur anwendbar auf nicht-skalare Beziehungen.
proxy_bulk_set¶ – Optional, zusammen mit proxy_factory zu verwenden.
- klasse sqlalchemy.ext.associationproxy.AssociationProxy¶
Ein Deskriptor, der eine Lese-/Schreibansicht eines Objektattributs präsentiert.
Mitglieder
__init__(), cascade_scalar_deletes, create_on_none_assignment, creator, extension_type, for_class(), getset_factory, info, is_aliased_class, is_attribute, is_bundle, is_clause_element, is_instance, is_mapper, is_property, is_selectable, key, proxy_bulk_set, proxy_factory, target_collection, value_attr
Klassensignatur
Klasse
sqlalchemy.ext.associationproxy.AssociationProxy(sqlalchemy.orm.base.InspectionAttrInfo,sqlalchemy.orm.base.ORMDescriptor,sqlalchemy.orm._DCAttributeOptions,sqlalchemy.ext.associationproxy._AssociationProxyProtocol)-
methode
sqlalchemy.ext.associationproxy.AssociationProxy.__init__(target_collection: str, attr: str, *, creator: _CreatorProtocol | None = None, getset_factory: _GetSetFactoryProtocol | None = None, proxy_factory: _ProxyFactoryProtocol | None = None, proxy_bulk_set: _ProxyBulkSetProtocol | None = None, info: _InfoType | None = None, cascade_scalar_deletes: bool = False, create_on_none_assignment: bool = False, attribute_options: _AttributeOptions | None = None)¶ Konstruiere ein neues
AssociationProxy.Das
AssociationProxy-Objekt wird typischerweise mit der Konstruktorfunktionassociation_proxy()erstellt. Siehe die Beschreibung vonassociation_proxy()für eine Beschreibung aller Parameter.
-
attribut
sqlalchemy.ext.associationproxy.AssociationProxy.cascade_scalar_deletes: bool¶
-
attribut
sqlalchemy.ext.associationproxy.AssociationProxy.create_on_none_assignment: bool¶
-
attribut
sqlalchemy.ext.associationproxy.AssociationProxy.creator: _CreatorProtocol | None¶
-
attribut
sqlalchemy.ext.associationproxy.AssociationProxy.extension_type: InspectionAttrExtensionType = 'ASSOCIATION_PROXY'¶ Der Erweiterungstyp, falls vorhanden. Standard ist
NotExtension.NOT_EXTENSION
-
methode
sqlalchemy.ext.associationproxy.AssociationProxy.for_class(class_: Type[Any], obj: object | None = None) → AssociationProxyInstance[_T]¶ Gibt den internen Zustand zurück, der lokal für eine bestimmte zugeordnete Klasse ist.
Z. B. für eine Klasse
Userclass User(Base): # ... keywords = association_proxy("kws", "keyword")
Wenn wir auf dieses
AssociationProxyvonMapper.all_orm_descriptorszugreifen und die Zielklasse für diesen Proxy, wie sie vonUserzugeordnet wird, anzeigen möchten.inspect(User).all_orm_descriptors["keywords"].for_class(User).target_class
Dies gibt eine Instanz von
AssociationProxyInstancezurück, die spezifisch für die KlasseUserist. DasAssociationProxy-Objekt bleibt von seiner übergeordneten Klasse unabhängig.- Parameter:
Neu in Version 1.3: -
AssociationProxyspeichert keinen zustandsspezifischen Zustand mehr für eine bestimmte übergeordnete Klasse; der Zustand wird nun in pro-KlasseAssociationProxyInstance-Objekten gespeichert.
-
attribut
sqlalchemy.ext.associationproxy.AssociationProxy.getset_factory: _GetSetFactoryProtocol | None¶
-
attribut
sqlalchemy.ext.associationproxy.AssociationProxy.info¶ geerbt von dem
InspectionAttrInfo.infoAttribut vonInspectionAttrInfoInfo-Wörterbuch, das dem Objekt zugeordnet ist und es ermöglicht, benutzerdefinierte Daten diesem
InspectionAttrzuzuordnen.Das Wörterbuch wird beim ersten Zugriff generiert. Alternativ kann es als Konstruktorargument für die Funktionen
column_property(),relationship()odercomposite()angegeben werden.
-
attribut
sqlalchemy.ext.associationproxy.AssociationProxy.is_aliased_class = False¶ geerbt von dem
InspectionAttr.is_aliased_classAttribut vonInspectionAttrTrue, wenn dieses Objekt eine Instanz von
AliasedClassist.
-
attribut
sqlalchemy.ext.associationproxy.AssociationProxy.is_attribute = True¶ True, wenn dieses Objekt ein Python Deskriptor ist.
Dies kann sich auf einen von vielen Typen beziehen. Normalerweise ein
QueryableAttribute, der Attributereignisse im Namen einerMapperPropertybehandelt. Kann aber auch ein Erweiterungstyp sein, wie z. B.AssociationProxyoderhybrid_property. DieInspectionAttr.extension_typebezieht sich auf eine Konstante, die den spezifischen Untertyp identifiziert.Siehe auch
-
attribut
sqlalchemy.ext.associationproxy.AssociationProxy.is_bundle = False¶ geerbt von dem
InspectionAttr.is_bundleAttribut vonInspectionAttrTrue, wenn dieses Objekt eine Instanz von
Bundleist.
-
Attribut
sqlalchemy.ext.associationproxy.AssociationProxy.is_clause_element = False¶ vererbt von der
InspectionAttr.is_clause_elementAttribut vonInspectionAttrTrue, wenn dieses Objekt eine Instanz von
ClauseElementist.
-
Attribut
sqlalchemy.ext.associationproxy.AssociationProxy.is_instance = False¶ vererbt von der
InspectionAttr.is_instanceAttribut vonInspectionAttrTrue, wenn dieses Objekt eine Instanz von
InstanceStateist.
-
Attribut
sqlalchemy.ext.associationproxy.AssociationProxy.is_mapper = False¶ vererbt von der
InspectionAttr.is_mapperAttribut vonInspectionAttrTrue, wenn dieses Objekt eine Instanz von
Mapperist.
-
Attribut
sqlalchemy.ext.associationproxy.AssociationProxy.is_property = False¶ vererbt von der
InspectionAttr.is_propertyAttribut vonInspectionAttrTrue, wenn dieses Objekt eine Instanz von
MapperPropertyist.
-
Attribut
sqlalchemy.ext.associationproxy.AssociationProxy.is_selectable = False¶ vererbt von der
InspectionAttr.is_selectableAttribut vonInspectionAttrGibt True zurück, wenn dieses Objekt eine Instanz von
Selectableist.
-
Attribut
sqlalchemy.ext.associationproxy.AssociationProxy.key: str¶
-
Attribut
sqlalchemy.ext.associationproxy.AssociationProxy.proxy_bulk_set: _ProxyBulkSetProtocol | None¶
-
Attribut
sqlalchemy.ext.associationproxy.AssociationProxy.proxy_factory: _ProxyFactoryProtocol | None¶
-
Attribut
sqlalchemy.ext.associationproxy.AssociationProxy.target_collection: str¶
-
Attribut
sqlalchemy.ext.associationproxy.AssociationProxy.value_attr: str¶
-
methode
- Klasse sqlalchemy.ext.associationproxy.AssociationProxyInstance¶
Ein pro-Klasse-Objekt, das klassen- und objektspezifische Ergebnisse liefert.
Dies wird von
AssociationProxyverwendet, wenn es in Bezug auf eine bestimmte Klasse oder Instanz einer Klasse aufgerufen wird, d. h. wenn es als regulärer Python-Deskriptor verwendet wird.Wenn
AssociationProxyals normaler Python-Deskriptor referenziert wird, istAssociationProxyInstancedas Objekt, das tatsächlich die Informationen bereitstellt. Unter normalen Umständen ist seine Präsenz transparent.>>> User.keywords.scalar False
In dem Sonderfall, dass das
AssociationProxy-Objekt direkt aufgerufen wird, um einen expliziten Zugriff aufAssociationProxyInstancezu erhalten, verwenden Sie die MethodeAssociationProxy.for_class().proxy_state = inspect(User).all_orm_descriptors["keywords"].for_class(User) # view if proxy object is scalar or not >>> proxy_state.scalar False
Neu in Version 1.3.
Mitglieder
__eq__(), __le__(), __lt__(), __ne__(), all_(), any(), any_(), asc(), attr, between(), bitwise_and(), bitwise_lshift(), bitwise_not(), bitwise_or(), bitwise_rshift(), bitwise_xor(), bool_op(), collate(), collection_class, concat(), contains(), delete(), desc(), distinct(), endswith(), for_proxy(), get(), has(), icontains(), iendswith(), ilike(), in_(), info, is_(), is_distinct_from(), is_not(), is_not_distinct_from(), isnot(), isnot_distinct_from(), istartswith(), like(), local_attr, match(), not_ilike(), not_in(), not_like(), notilike(), notin_(), notlike(), nulls_first(), nulls_last(), nullsfirst(), nullslast(), op(), operate(), parent, regexp_match(), regexp_replace(), remote_attr, reverse_operate(), scalar, set(), startswith(), target_class, timetuple
Klassensignatur
class
sqlalchemy.ext.associationproxy.AssociationProxyInstance(sqlalchemy.orm.base.SQLORMOperations)-
Methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.__eq__(other: Any) → ColumnOperators¶ vererbt von der
sqlalchemy.sql.expression.ColumnOperators.__eq__Methode vonColumnOperatorsImplementiert den
==Operator.Im Spaltenkontext wird die Klausel
a = berzeugt. Wenn das ZielNoneist, wirda IS NULLerzeugt.
-
Methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.__le__(other: Any) → ColumnOperators¶ vererbt von der
sqlalchemy.sql.expression.ColumnOperators.__le__Methode vonColumnOperatorsImplementiert den Operator
<=.In einem Spaltenkontext wird die Klausel
a <= berzeugt.
-
Methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.__lt__(other: Any) → ColumnOperators¶ vererbt von der
sqlalchemy.sql.expression.ColumnOperators.__lt__Methode vonColumnOperatorsImplementiert den Operator
<.In einem Spaltenkontext wird die Klausel
a < berzeugt.
-
Methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.__ne__(other: Any) → ColumnOperators¶ vererbt von der
sqlalchemy.sql.expression.ColumnOperators.__ne__Methode vonColumnOperatorsImplementiert den Operator
!=.In einem Spaltenkontext wird die Klausel
a != berzeugt. Wenn das ZielNoneist, wirda IS NOT NULLerzeugt.
-
Methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.all_() → ColumnOperators¶ vererbt von der
ColumnOperators.all_()Methode vonColumnOperatorsErzeugt eine
all_()Klausel gegen das übergeordnete Objekt.Siehe die Dokumentation für
all_()für Beispiele.Hinweis
Achten Sie darauf, die neuere Methode
ColumnOperators.all_()nicht mit der Legacy-Version dieser Methode, der MethodeComparator.all(), die spezifisch fürARRAYist und einen anderen Aufrufstil verwendet, zu verwechseln.
-
Methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.any(criterion: _ColumnExpressionArgument[bool] | None = None, **kwargs: Any) → ColumnElement[bool]¶ Erzeugt einen proxysteuerten 'any'-Ausdruck unter Verwendung von EXISTS.
Dieser Ausdruck wird ein zusammengesetztes Produkt sein, das die Operatoren
Comparator.any()und/oderComparator.has()der zugrunde liegenden proxysteuerten Attribute verwendet.
-
Methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.any_() → ColumnOperators¶ vererbt von der
ColumnOperators.any_()Methode vonColumnOperatorsErzeugt eine
any_()Klausel gegen das übergeordnete Objekt.Siehe die Dokumentation für
any_()für Beispiele.Hinweis
Achten Sie darauf, die neuere Methode
ColumnOperators.any_()nicht mit der Legacy-Version dieser Methode, der MethodeComparator.any(), die spezifisch fürARRAYist und einen anderen Aufrufstil verwendet, zu verwechseln.
-
Methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.asc() → ColumnOperators¶ vererbt von der
ColumnOperators.asc()Methode vonColumnOperatorsErzeugt eine
asc()Klausel gegen das übergeordnete Objekt.
-
Attribut
sqlalchemy.ext.associationproxy.AssociationProxyInstance.attr¶ Gibt ein Tupel von
(local_attr, remote_attr)zurück.Dieses Attribut war ursprünglich dazu gedacht, die Methode
Query.join()zu erleichtern, um über beide Beziehungen gleichzeitig zu joinen, dies nutzt jedoch einen veralteten Aufrufstil.Um
select.join()oderQuery.join()mit einem Association Proxy zu verwenden, besteht die aktuelle Methode darin, die AttributeAssociationProxyInstance.local_attrundAssociationProxyInstance.remote_attrseparat zu verwenden.stmt = ( select(Parent) .join(Parent.proxied.local_attr) .join(Parent.proxied.remote_attr) )
Eine zukünftige Version könnte versuchen, ein prägnanteres Join-Muster für Association Proxy Attribute bereitzustellen.
-
Methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.zwischen(cleft: Any, cright: Any, symmetrisch: bool = False) → ColumnOperators¶ geerbt von der
ColumnOperators.between()Methode vonColumnOperatorsErzeugt eine
between()-Klausel gegen das Elternobjekt, gegeben den unteren und oberen Bereich.
-
Methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.bitwise_and(other: Any) → ColumnOperators¶ geerbt von der
ColumnOperators.bitwise_and()Methode vonColumnOperatorsErzeugt eine bitweise AND-Operation, typischerweise über den Operator
&.Neu in Version 2.0.2.
Siehe auch
-
Methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.bitwise_lshift(other: Any) → ColumnOperators¶ geerbt von der
ColumnOperators.bitwise_lshift()Methode vonColumnOperatorsErzeugt eine bitweise LSHIFT-Operation, typischerweise über den Operator
<<.Neu in Version 2.0.2.
Siehe auch
-
Methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.bitwise_not() → ColumnOperators¶ geerbt von der
ColumnOperators.bitwise_not()Methode vonColumnOperatorsErzeugt eine bitweise NOT-Operation, typischerweise über den Operator
~.Neu in Version 2.0.2.
Siehe auch
-
Methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.bitwise_or(other: Any) → ColumnOperators¶ geerbt von der
ColumnOperators.bitwise_or()Methode vonColumnOperatorsErzeugt eine bitweise OR-Operation, typischerweise über den Operator
|.Neu in Version 2.0.2.
Siehe auch
-
Methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.bitwise_rshift(other: Any) → ColumnOperators¶ geerbt von der
ColumnOperators.bitwise_rshift()Methode vonColumnOperatorsErzeugt eine bitweise RSHIFT-Operation, typischerweise über den Operator
>>.Neu in Version 2.0.2.
Siehe auch
-
Methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.bitwise_xor(other: Any) → ColumnOperators¶ geerbt von der
ColumnOperators.bitwise_xor()Methode vonColumnOperatorsErzeugt eine bitweise XOR-Operation, typischerweise über den Operator
^oder#für PostgreSQL.Neu in Version 2.0.2.
Siehe auch
-
Methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.bool_op(opstring: str, precedence: int = 0, python_impl: Callable[[...], Any] | None = None) → Callable[[Any], Operators]¶ geerbt von der
Operators.bool_op()Methode vonOperatorsGibt einen benutzerdefinierten booleschen Operator zurück.
Diese Methode ist eine Kurzform für den Aufruf von
Operators.op()und das Übergeben des FlagsOperators.op.is_comparisonmit True. Ein wesentlicher Vorteil der Verwendung vonOperators.bool_op()ist, dass bei der Verwendung von Spaltenkonstrukten die „boolesche“ Natur des zurückgegebenen Ausdrucks für PEP 484-Zwecke vorhanden ist.Siehe auch
-
Methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.collate(collation: str) → ColumnOperators¶ geerbt von der
ColumnOperators.collate()Methode vonColumnOperatorsErzeugt eine
collate()-Klausel gegen das Elternobjekt, gegeben den Collation-String.Siehe auch
-
Attribut
sqlalchemy.ext.associationproxy.AssociationProxyInstance.collection_class: Type[Any] | None¶
-
Methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.concat(other: Any) → ColumnOperators¶ geerbt von der
ColumnOperators.concat()Methode vonColumnOperatorsImplementiert den 'concat'-Operator.
In einem Spaltenkontext erzeugt dies die Klausel
a || boder verwendet denconcat()-Operator unter MySQL.
-
Methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.enthält(other: Any, **kw: Any) → ColumnOperators¶ geerbt von der
ColumnOperators.contains()Methode vonColumnOperatorsImplementiert den 'contains'-Operator.
Erzeugt einen LIKE-Ausdruck, der gegen eine Übereinstimmung am Ende eines String-Wertes prüft.
column LIKE '%' || <other> || '%'
Z. B.
stmt = select(sometable).where(sometable.c.column.contains("foobar"))
Da der Operator
LIKEverwendet, verhalten sich Wildcard-Zeichen"%"und"_", die im <other>-Ausdruck vorkommen, ebenfalls wie Wildcards. Für literale Zeichenkettenwerte kann das FlagColumnOperators.contains.autoescapeaufTruegesetzt werden, um Escape-Zeichen für Vorkommen dieser Zeichen innerhalb des Zeichenkettenwerts anzuwenden, damit sie als sie selbst und nicht als Wildcard-Zeichen übereinstimmen. Alternativ etabliert der ParameterColumnOperators.contains.escapeein gegebenes Zeichen als Escape-Zeichen, was nützlich sein kann, wenn der Zielausdruck keine literale Zeichenkette ist.- Parameter:
other¶ – Ausdruck, der verglichen werden soll. Dies ist normalerweise ein einfacher Zeichenkettenwert, kann aber auch ein beliebiger SQL-Ausdruck sein. LIKE-Wildcard-Zeichen
%und_werden standardmäßig nicht escaped, es sei denn, das FlagColumnOperators.contains.autoescapeist auf True gesetzt.autoescape¶ –
Boolean; wenn True, wird ein Escape-Zeichen innerhalb des LIKE-Ausdrucks etabliert und dann auf alle Vorkommen von
"%","_"und des Escape-Zeichens selbst im Vergleichswert angewendet, der als literaler String und nicht als SQL-Ausdruck angenommen wird.Ein Ausdruck wie
somecolumn.contains("foo%bar", autoescape=True)
Wird gerendert als
somecolumn LIKE '%' || :param || '%' ESCAPE '/'
Mit dem Wert von
:paramals"foo/%bar".escape¶ –
ein Zeichen, das bei Angabe mit dem Schlüsselwort
ESCAPEgerendert wird, um dieses Zeichen als Escape-Zeichen zu etablieren. Dieses Zeichen kann dann vor Vorkommen von%und_gestellt werden, damit sie als sie selbst und nicht als Wildcard-Zeichen wirken.Ein Ausdruck wie
somecolumn.contains("foo/%bar", escape="^")
Wird gerendert als
somecolumn LIKE '%' || :param || '%' ESCAPE '^'
Der Parameter kann auch mit
ColumnOperators.contains.autoescapekombiniert werden.somecolumn.contains("foo%bar^bat", escape="^", autoescape=True)
Wo oben der angegebene literale Parameter zu
"foo^%bar^^bat"konvertiert wird, bevor er an die Datenbank übergeben wird.
-
Methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.delete(obj: Any) → None¶
-
Methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.desc() → ColumnOperators¶ geerbt von der
ColumnOperators.desc()Methode vonColumnOperatorsErzeugt eine
desc()-Klausel gegen das Elternobjekt.
-
Methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.distinct() → ColumnOperators¶ geerbt von der
ColumnOperators.distinct()Methode vonColumnOperatorsErzeugt eine
distinct()-Klausel gegen das Elternobjekt.
-
Methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.endswith(other: Any, escape: str | None = None, autoescape: bool = False) → ColumnOperators¶ geerbt von der
ColumnOperators.endswith()Methode vonColumnOperatorsImplementiert den 'endswith'-Operator.
Erzeugt einen LIKE-Ausdruck, der gegen eine Übereinstimmung am Ende eines String-Wertes prüft.
column LIKE '%' || <other>
Z. B.
stmt = select(sometable).where(sometable.c.column.endswith("foobar"))
Da der Operator
LIKEverwendet, verhalten sich Wildcard-Zeichen"%"und"_", die im <other>-Ausdruck vorkommen, ebenfalls wie Wildcards. Für literale Zeichenkettenwerte kann das FlagColumnOperators.endswith.autoescapeaufTruegesetzt werden, um Escape-Zeichen für Vorkommen dieser Zeichen innerhalb des Zeichenkettenwerts anzuwenden, damit sie als sie selbst und nicht als Wildcard-Zeichen übereinstimmen. Alternativ etabliert der ParameterColumnOperators.endswith.escapeein gegebenes Zeichen als Escape-Zeichen, was nützlich sein kann, wenn der Zielausdruck keine literale Zeichenkette ist.- Parameter:
other¶ – Ausdruck, der verglichen werden soll. Dies ist normalerweise ein einfacher Zeichenkettenwert, kann aber auch ein beliebiger SQL-Ausdruck sein. LIKE-Wildcard-Zeichen
%und_werden standardmäßig nicht escaped, es sei denn, das FlagColumnOperators.endswith.autoescapeist auf True gesetzt.autoescape¶ –
Boolean; wenn True, wird ein Escape-Zeichen innerhalb des LIKE-Ausdrucks etabliert und dann auf alle Vorkommen von
"%","_"und des Escape-Zeichens selbst im Vergleichswert angewendet, der als literaler String und nicht als SQL-Ausdruck angenommen wird.Ein Ausdruck wie
somecolumn.endswith("foo%bar", autoescape=True)
Wird gerendert als
somecolumn LIKE '%' || :param ESCAPE '/'
Mit dem Wert von
:paramals"foo/%bar".escape¶ –
ein Zeichen, das bei Angabe mit dem Schlüsselwort
ESCAPEgerendert wird, um dieses Zeichen als Escape-Zeichen zu etablieren. Dieses Zeichen kann dann vor Vorkommen von%und_gestellt werden, damit sie als sie selbst und nicht als Wildcard-Zeichen wirken.Ein Ausdruck wie
somecolumn.endswith("foo/%bar", escape="^")
Wird gerendert als
somecolumn LIKE '%' || :param ESCAPE '^'
Der Parameter kann auch mit
ColumnOperators.endswith.autoescapekombiniert werden.somecolumn.endswith("foo%bar^bat", escape="^", autoescape=True)
Wo oben der angegebene literale Parameter zu
"foo^%bar^^bat"konvertiert wird, bevor er an die Datenbank übergeben wird.
-
classmethod
sqlalchemy.ext.associationproxy.AssociationProxyInstance.for_proxy(parent: AssociationProxy[_T], owning_class: Type[Any], parent_instance: Any) → AssociationProxyInstance[_T]¶
-
Methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.get(obj: Any) → _T | None | AssociationProxyInstance[_T]¶
-
Methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.has(criterion: _ColumnExpressionArgument[bool] | None = None, **kwargs: Any) → ColumnElement[bool]¶ Erzeugt einen proxysierten „has“-Ausdruck unter Verwendung von EXISTS.
Dieser Ausdruck wird ein zusammengesetztes Produkt sein, das die Operatoren
Comparator.any()und/oderComparator.has()der zugrunde liegenden proxysteuerten Attribute verwendet.
-
Methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.icontains(other: Any, **kw: Any) → ColumnOperators¶ geerbt von der
ColumnOperators.icontains()Methode vonColumnOperatorsImplementiert den
icontains-Operator, z. B. die Groß-/Kleinschreibung ignorierende Version vonColumnOperators.contains().Erzeugt einen LIKE-Ausdruck, der gegen eine unempfindliche Übereinstimmung in der Mitte eines Zeichenkettenwerts testet.
lower(column) LIKE '%' || lower(<other>) || '%'
Z. B.
stmt = select(sometable).where(sometable.c.column.icontains("foobar"))
Da der Operator
LIKEverwendet, fungieren Platzhalterzeichen"%"und"_", die im <other>-Ausdruck vorhanden sind, ebenfalls als Platzhalter. Für literale Zeichenfolgenwerte kann das FlagColumnOperators.icontains.autoescapeaufTruegesetzt werden, um Vorkommen dieser Zeichen innerhalb des Zeichenfolgenwerts zu escapen, damit sie als sie selbst und nicht als Platzhalterzeichen übereinstimmen. Alternativ etabliert der ParameterColumnOperators.icontains.escapeein gegebenes Zeichen als Escape-Zeichen, was nützlich sein kann, wenn der Zielausdruck keine literale Zeichenfolge ist.- Parameter:
other¶ – der zu vergleichende Ausdruck. Dies ist normalerweise ein einfacher Zeichenfolgenwert, kann aber auch ein beliebiger SQL-Ausdruck sein. LIKE-Platzhalterzeichen
%und_werden standardmäßig nicht escaped, es sei denn, das FlagColumnOperators.icontains.autoescapeist auf True gesetzt.autoescape¶ –
Boolean; wenn True, wird ein Escape-Zeichen innerhalb des LIKE-Ausdrucks etabliert und dann auf alle Vorkommen von
"%","_"und des Escape-Zeichens selbst im Vergleichswert angewendet, der als literaler String und nicht als SQL-Ausdruck angenommen wird.Ein Ausdruck wie
somecolumn.icontains("foo%bar", autoescape=True)
Wird gerendert als
lower(somecolumn) LIKE '%' || lower(:param) || '%' ESCAPE '/'
Mit dem Wert von
:paramals"foo/%bar".escape¶ –
ein Zeichen, das bei Angabe mit dem Schlüsselwort
ESCAPEgerendert wird, um dieses Zeichen als Escape-Zeichen zu etablieren. Dieses Zeichen kann dann vor Vorkommen von%und_gestellt werden, damit sie als sie selbst und nicht als Wildcard-Zeichen wirken.Ein Ausdruck wie
somecolumn.icontains("foo/%bar", escape="^")
Wird gerendert als
lower(somecolumn) LIKE '%' || lower(:param) || '%' ESCAPE '^'
Der Parameter kann auch mit
ColumnOperators.contains.autoescapekombiniert werden.somecolumn.icontains("foo%bar^bat", escape="^", autoescape=True)
Wo oben der angegebene literale Parameter zu
"foo^%bar^^bat"konvertiert wird, bevor er an die Datenbank übergeben wird.
Siehe auch
-
method
sqlalchemy.ext.associationproxy.AssociationProxyInstance.iendswith(other: Any, escape: str | None = None, autoescape: bool = False) → ColumnOperators¶ vererbt von der
ColumnOperators.iendswith()Methode vonColumnOperatorsImplementiert den Operator
iendswith, z. B. die Groß-/Kleinschreibung-unempfindliche Version vonColumnOperators.endswith().Erzeugt einen LIKE-Ausdruck, der gegen eine unempfindliche Übereinstimmung am Ende eines Zeichenkettenwerts testet.
lower(column) LIKE '%' || lower(<other>)
Z. B.
stmt = select(sometable).where(sometable.c.column.iendswith("foobar"))
Da der Operator
LIKEverwendet, fungieren Platzhalterzeichen"%"und"_", die im <other>-Ausdruck vorhanden sind, ebenfalls als Platzhalter. Für literale Zeichenfolgenwerte kann das FlagColumnOperators.iendswith.autoescapeaufTruegesetzt werden, um Vorkommen dieser Zeichen innerhalb des Zeichenfolgenwerts zu escapen, damit sie als sie selbst und nicht als Platzhalterzeichen übereinstimmen. Alternativ etabliert der ParameterColumnOperators.iendswith.escapeein gegebenes Zeichen als Escape-Zeichen, was nützlich sein kann, wenn der Zielausdruck keine literale Zeichenfolge ist.- Parameter:
other¶ – der zu vergleichende Ausdruck. Dies ist normalerweise ein einfacher Zeichenfolgenwert, kann aber auch ein beliebiger SQL-Ausdruck sein. LIKE-Platzhalterzeichen
%und_werden standardmäßig nicht escaped, es sei denn, das FlagColumnOperators.iendswith.autoescapeist auf True gesetzt.autoescape¶ –
Boolean; wenn True, wird ein Escape-Zeichen innerhalb des LIKE-Ausdrucks etabliert und dann auf alle Vorkommen von
"%","_"und des Escape-Zeichens selbst im Vergleichswert angewendet, der als literaler String und nicht als SQL-Ausdruck angenommen wird.Ein Ausdruck wie
somecolumn.iendswith("foo%bar", autoescape=True)
Wird gerendert als
lower(somecolumn) LIKE '%' || lower(:param) ESCAPE '/'
Mit dem Wert von
:paramals"foo/%bar".escape¶ –
ein Zeichen, das bei Angabe mit dem Schlüsselwort
ESCAPEgerendert wird, um dieses Zeichen als Escape-Zeichen zu etablieren. Dieses Zeichen kann dann vor Vorkommen von%und_gestellt werden, damit sie als sie selbst und nicht als Wildcard-Zeichen wirken.Ein Ausdruck wie
somecolumn.iendswith("foo/%bar", escape="^")
Wird gerendert als
lower(somecolumn) LIKE '%' || lower(:param) ESCAPE '^'
Der Parameter kann auch mit
ColumnOperators.iendswith.autoescapekombiniert werdensomecolumn.endswith("foo%bar^bat", escape="^", autoescape=True)
Wo oben der angegebene literale Parameter zu
"foo^%bar^^bat"konvertiert wird, bevor er an die Datenbank übergeben wird.
Siehe auch
-
method
sqlalchemy.ext.associationproxy.AssociationProxyInstance.ilike(other: Any, escape: str | None = None) → ColumnOperators¶ vererbt von der
ColumnOperators.ilike()Methode vonColumnOperatorsImplementiert den
ilikeOperator, z. B. die Groß-/Kleinschreibung-unabhängige LIKE-Abfrage.In einem Spaltenkontext wird ein Ausdruck erzeugt, entweder in der Form
lower(a) LIKE lower(other)
Oder auf Backends, die den ILIKE-Operator unterstützen
a ILIKE other
Z. B.
stmt = select(sometable).where(sometable.c.column.ilike("%foobar%"))
- Parameter:
Siehe auch
-
method
sqlalchemy.ext.associationproxy.AssociationProxyInstance.in_(other: Any) → ColumnOperators¶ vererbt von der
ColumnOperators.in_()Methode vonColumnOperatorsImplementiert den
inOperator.In einem Spaltenkontext wird die Klausel
column IN <other>erzeugt.Der angegebene Parameter
otherkann seinEine Liste von literalen Werten, z. B.
stmt.where(column.in_([1, 2, 3]))
In dieser Aufrufform wird die Liste der Elemente in eine Menge von gebundenen Parametern der gleichen Länge wie die angegebene Liste umgewandelt.
WHERE COL IN (?, ?, ?)
Eine Liste von Tupeln kann bereitgestellt werden, wenn der Vergleich gegen ein
tuple_()mit mehreren Ausdrücken erfolgtfrom sqlalchemy import tuple_ stmt.where(tuple_(col1, col2).in_([(1, 10), (2, 20), (3, 30)]))
Eine leere Liste, z. B.
stmt.where(column.in_([]))
In dieser Aufrufform rendert der Ausdruck einen "leeren Mengen"-Ausdruck. Diese Ausdrücke sind auf einzelne Backends zugeschnitten und versuchen im Allgemeinen, eine leere SELECT-Anweisung als Unterabfrage zu erhalten. Auf SQLite ist der Ausdruck
WHERE col IN (SELECT 1 FROM (SELECT 1) WHERE 1!=1)
Geändert in Version 1.4: Leere IN-Ausdrücke verwenden nun in allen Fällen eine zur Laufzeit generierte SELECT-Unterabfrage.
Ein gebundener Parameter, z. B.
bindparam(), kann verwendet werden, wenn er das Flagbindparam.expandingenthältstmt.where(column.in_(bindparam("value", expanding=True)))
In dieser Aufrufform rendert der Ausdruck einen speziellen nicht-SQL-Platzhalter-Ausdruck, der wie folgt aussieht:
WHERE COL IN ([EXPANDING_value])
Dieser Platzhalter-Ausdruck wird zur Laufzeit der Anweisung abgefangen und in die variable Anzahl von gebundenen Parametern umgewandelt, wie zuvor gezeigt. Wenn die Anweisung ausgeführt würde als
connection.execute(stmt, {"value": [1, 2, 3]})
Die Datenbank würde für jeden Wert einen gebundenen Parameter erhalten.
WHERE COL IN (?, ?, ?)
Neu in Version 1.2: "expanding" gebundene Parameter hinzugefügt.
Wenn eine leere Liste übergeben wird, wird ein spezieller "leere Liste"-Ausdruck gerendert, der für die verwendete Datenbank spezifisch ist. Auf SQLite wäre dies
WHERE COL IN (SELECT 1 FROM (SELECT 1) WHERE 1!=1)
Neu in Version 1.3: "expanding" gebundene Parameter unterstützen nun leere Listen.
eine
select()-Konstruktion, die normalerweise eine korrelierte Skalarselektion iststmt.where( column.in_(select(othertable.c.y).where(table.c.x == othertable.c.x)) )
In dieser Aufrufform wird
ColumnOperators.in_()wie angegeben gerendertWHERE COL IN (SELECT othertable.y FROM othertable WHERE othertable.x = table.x)
- Parameter:
other¶ – eine Liste von Literalen, eine
select()-Konstruktion oder einebindparam()-Konstruktion, die das Flagbindparam.expandingauf True gesetzt enthält.
-
method
sqlalchemy.ext.associationproxy.AssociationProxyInstance.is_(other: Any) → ColumnOperators¶ vererbt von der
ColumnOperators.is_()Methode vonColumnOperatorsImplementiert den
ISOperator.Normalerweise wird
ISautomatisch generiert, wenn mit einem Wert vonNoneverglichen wird, was zuNULLaufgelöst wird. Eine explizite Verwendung vonISkann jedoch wünschenswert sein, wenn auf bestimmten Plattformen mit booleschen Werten verglichen wird.Siehe auch
-
method
sqlalchemy.ext.associationproxy.AssociationProxyInstance.is_distinct_from(other: Any) → ColumnOperators¶ vererbt von der
ColumnOperators.is_distinct_from()Methode vonColumnOperatorsImplementiert den
IS DISTINCT FROMOperator.Rendert auf den meisten Plattformen "a IS DISTINCT FROM b"; auf einigen wie SQLite möglicherweise "a IS NOT b".
-
method
sqlalchemy.ext.associationproxy.AssociationProxyInstance.is_not(other: Any) → ColumnOperators¶ vererbt von der
ColumnOperators.is_not()Methode vonColumnOperatorsImplementiert den
IS NOTOperator.Normalerweise wird
IS NOTautomatisch generiert, wenn mit einem Wert vonNoneverglichen wird, was zuNULLaufgelöst wird. Eine explizite Verwendung vonIS NOTkann jedoch wünschenswert sein, wenn auf bestimmten Plattformen mit booleschen Werten verglichen wird.Geändert in Version 1.4: Der
is_not()Operator wurde vonisnot()in früheren Versionen umbenannt. Der vorherige Name bleibt aus Kompatibilitätsgründen erhalten.Siehe auch
-
method
sqlalchemy.ext.associationproxy.AssociationProxyInstance.is_not_distinct_from(other: Any) → ColumnOperators¶ vererbt von der
ColumnOperators.isnot_distinct_from()Methode vonColumnOperatorsImplementiert den
IS NOT DISTINCT FROMOperator.Rendert auf den meisten Plattformen "a IS NOT DISTINCT FROM b"; auf einigen wie SQLite möglicherweise "a IS b".
Geändert in Version 1.4: Der
is_not_distinct_from()Operator wurde vonisnot_distinct_from()in früheren Versionen umbenannt. Der vorherige Name bleibt aus Kompatibilitätsgründen erhalten.
-
method
sqlalchemy.ext.associationproxy.AssociationProxyInstance.isnot(other: Any) → ColumnOperators¶ vererbt von der
ColumnOperators.isnot()Methode vonColumnOperatorsImplementiert den
IS NOTOperator.Normalerweise wird
IS NOTautomatisch generiert, wenn mit einem Wert vonNoneverglichen wird, was zuNULLaufgelöst wird. Eine explizite Verwendung vonIS NOTkann jedoch wünschenswert sein, wenn auf bestimmten Plattformen mit booleschen Werten verglichen wird.Geändert in Version 1.4: Der
is_not()Operator wurde vonisnot()in früheren Versionen umbenannt. Der vorherige Name bleibt aus Kompatibilitätsgründen erhalten.Siehe auch
-
method
sqlalchemy.ext.associationproxy.AssociationProxyInstance.isnot_distinct_from(other: Any) → ColumnOperators¶ vererbt von der
ColumnOperators.isnot_distinct_from()Methode vonColumnOperatorsImplementiert den
IS NOT DISTINCT FROMOperator.Rendert auf den meisten Plattformen "a IS NOT DISTINCT FROM b"; auf einigen wie SQLite möglicherweise "a IS b".
Geändert in Version 1.4: Der
is_not_distinct_from()Operator wurde vonisnot_distinct_from()in früheren Versionen umbenannt. Der vorherige Name bleibt aus Kompatibilitätsgründen erhalten.
-
method
sqlalchemy.ext.associationproxy.AssociationProxyInstance.istartswith(other: Any, escape: str | None = None, autoescape: bool = False) → ColumnOperators¶ vererbt von der
ColumnOperators.istartswith()Methode vonColumnOperatorsImplementiert den Operator
istartswith, z. B. die Groß-/Kleinschreibung-unempfindliche Version vonColumnOperators.startswith().Erzeugt einen LIKE-Ausdruck, der gegen eine unempfindliche Übereinstimmung am Anfang eines Zeichenkettenwerts testet.
lower(column) LIKE lower(<other>) || '%'
Z. B.
stmt = select(sometable).where(sometable.c.column.istartswith("foobar"))
Da der Operator
LIKEverwendet, fungieren Platzhalterzeichen"%"und"_", die im <other>-Ausdruck vorhanden sind, ebenfalls als Platzhalter. Für literale Zeichenfolgenwerte kann das FlagColumnOperators.istartswith.autoescapeaufTruegesetzt werden, um Vorkommen dieser Zeichen innerhalb des Zeichenfolgenwerts zu escapen, damit sie als sie selbst und nicht als Platzhalterzeichen übereinstimmen. Alternativ etabliert der ParameterColumnOperators.istartswith.escapeein gegebenes Zeichen als Escape-Zeichen, was nützlich sein kann, wenn der Zielausdruck keine literale Zeichenfolge ist.- Parameter:
other¶ – der zu vergleichende Ausdruck. Dies ist normalerweise ein einfacher Zeichenfolgenwert, kann aber auch ein beliebiger SQL-Ausdruck sein. LIKE-Platzhalterzeichen
%und_werden standardmäßig nicht escaped, es sei denn, das FlagColumnOperators.istartswith.autoescapeist auf True gesetzt.autoescape¶ –
Boolean; wenn True, wird ein Escape-Zeichen innerhalb des LIKE-Ausdrucks etabliert und dann auf alle Vorkommen von
"%","_"und des Escape-Zeichens selbst im Vergleichswert angewendet, der als literaler String und nicht als SQL-Ausdruck angenommen wird.Ein Ausdruck wie
somecolumn.istartswith("foo%bar", autoescape=True)
Wird gerendert als
lower(somecolumn) LIKE lower(:param) || '%' ESCAPE '/'
Mit dem Wert von
:paramals"foo/%bar".escape¶ –
ein Zeichen, das bei Angabe mit dem Schlüsselwort
ESCAPEgerendert wird, um dieses Zeichen als Escape-Zeichen zu etablieren. Dieses Zeichen kann dann vor Vorkommen von%und_gestellt werden, damit sie als sie selbst und nicht als Wildcard-Zeichen wirken.Ein Ausdruck wie
somecolumn.istartswith("foo/%bar", escape="^")
Wird gerendert als
lower(somecolumn) LIKE lower(:param) || '%' ESCAPE '^'
Der Parameter kann auch mit
ColumnOperators.istartswith.autoescapekombiniert werdensomecolumn.istartswith("foo%bar^bat", escape="^", autoescape=True)
Wo oben der angegebene literale Parameter zu
"foo^%bar^^bat"konvertiert wird, bevor er an die Datenbank übergeben wird.
Siehe auch
-
method
sqlalchemy.ext.associationproxy.AssociationProxyInstance.like(other: Any, escape: str | None = None) → ColumnOperators¶ vererbt von der
ColumnOperators.like()Methode vonColumnOperatorsImplementiert den
likeOperator.In einem Spaltenkontext wird der Ausdruck erzeugt
a LIKE other
Z. B.
stmt = select(sometable).where(sometable.c.column.like("%foobar%"))
- Parameter:
Siehe auch
-
attribute
sqlalchemy.ext.associationproxy.AssociationProxyInstance.local_attr¶ Das „lokale“ Klassenattribut, auf das sich diese
AssociationProxyInstancebezieht.
-
method
sqlalchemy.ext.associationproxy.AssociationProxyInstance.match(other: Any, **kwargs: Any) → ColumnOperators¶ vererbt von der
ColumnOperators.match()Methode vonColumnOperatorsImplementiert einen datenbankspezifischen 'match'-Operator.
ColumnOperators.match()versucht, zu einer MATCH-ähnlichen Funktion oder einem Operator aufzulösen, der von Backend bereitgestellt wird. Beispiele hierfür sindPostgreSQL - rendert
x @@ plainto_tsquery(y)Geändert in Version 2.0:
plainto_tsquery()wird nun anstelle vonto_tsquery()für PostgreSQL verwendet; weitere Informationen zu anderen Formen finden Sie unter Full Text Search.MySQL - rendert
MATCH (x) AGAINST (y IN BOOLEAN MODE)Siehe auch
match- MySQL-spezifische Konstruktion mit zusätzlichen Funktionen.Oracle Database - rendert
CONTAINS(x, y)andere Backends können spezielle Implementierungen bereitstellen.
Backends ohne spezielle Implementierung geben den Operator als „MATCH“ aus. Dies ist beispielsweise mit SQLite kompatibel.
-
methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.nicht_ilike(andere: Any, escape: str | None = None) → ColumnOperators¶ geerbt von der
ColumnOperators.nicht_ilike()Methode vonColumnOperatorsImplementiert den
NOT ILIKEOperator.Dies ist äquivalent zur Verwendung von Negation mit
ColumnOperators.ilike(), d.h.~x.ilike(y).Geändert in Version 1.4: Der Operator
not_ilike()wurde vonnotilike()in früheren Versionen umbenannt. Der vorherige Name bleibt für Abwärtskompatibilität verfügbar.Siehe auch
-
methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.nicht_in(andere: Any) → ColumnOperators¶ geerbt von der
ColumnOperators.nicht_in()Methode vonColumnOperatorsImplementiert den
NOT INOperator.Dies ist äquivalent zur Verwendung von Negation mit
ColumnOperators.in_(), d.h.~x.in_(y).Wenn
andereeine leere Sequenz ist, erzeugt der Compiler einen "leeren nicht in"-Ausdruck. Dies ist standardmäßig der Ausdruck "1 = 1", um in allen Fällen "wahr" zu erzeugen. Diecreate_engine.empty_in_strategykann verwendet werden, um dieses Verhalten zu ändern.Geändert in Version 1.4: Der Operator
not_in()wurde vonnotin_()in früheren Versionen umbenannt. Der vorherige Name bleibt für Abwärtskompatibilität verfügbar.Geändert in Version 1.2: Die Operatoren
ColumnOperators.in_()undColumnOperators.nicht_in()erzeugen standardmäßig einen "statischen" Ausdruck für eine leere IN-Sequenz.Siehe auch
-
methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.nicht_like(andere: Any, escape: str | None = None) → ColumnOperators¶ geerbt von der
ColumnOperators.nicht_like()Methode vonColumnOperatorsImplementiert den
NOT LIKEOperator.Dies ist äquivalent zur Verwendung von Negation mit
ColumnOperators.like(), d.h.~x.like(y).Geändert in Version 1.4: Der Operator
not_like()wurde vonnotlike()in früheren Versionen umbenannt. Der vorherige Name bleibt für Abwärtskompatibilität verfügbar.Siehe auch
-
methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.nichtilike(andere: Any, escape: str | None = None) → ColumnOperators¶ geerbt von der
ColumnOperators.nichtilike()Methode vonColumnOperatorsImplementiert den
NOT ILIKEOperator.Dies ist äquivalent zur Verwendung von Negation mit
ColumnOperators.ilike(), d.h.~x.ilike(y).Geändert in Version 1.4: Der Operator
not_ilike()wurde vonnotilike()in früheren Versionen umbenannt. Der vorherige Name bleibt für Abwärtskompatibilität verfügbar.Siehe auch
-
methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.notin_(andere: Any) → ColumnOperators¶ geerbt von der
ColumnOperators.notin_()Methode vonColumnOperatorsImplementiert den
NOT INOperator.Dies ist äquivalent zur Verwendung von Negation mit
ColumnOperators.in_(), d.h.~x.in_(y).Wenn
andereeine leere Sequenz ist, erzeugt der Compiler einen "leeren nicht in"-Ausdruck. Dies ist standardmäßig der Ausdruck "1 = 1", um in allen Fällen "wahr" zu erzeugen. Diecreate_engine.empty_in_strategykann verwendet werden, um dieses Verhalten zu ändern.Geändert in Version 1.4: Der Operator
not_in()wurde vonnotin_()in früheren Versionen umbenannt. Der vorherige Name bleibt für Abwärtskompatibilität verfügbar.Geändert in Version 1.2: Die Operatoren
ColumnOperators.in_()undColumnOperators.nicht_in()erzeugen standardmäßig einen "statischen" Ausdruck für eine leere IN-Sequenz.Siehe auch
-
methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.nichtlike(andere: Any, escape: str | None = None) → ColumnOperators¶ geerbt von der
ColumnOperators.nichtlike()Methode vonColumnOperatorsImplementiert den
NOT LIKEOperator.Dies ist äquivalent zur Verwendung von Negation mit
ColumnOperators.like(), d.h.~x.like(y).Geändert in Version 1.4: Der Operator
not_like()wurde vonnotlike()in früheren Versionen umbenannt. Der vorherige Name bleibt für Abwärtskompatibilität verfügbar.Siehe auch
-
methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.nulls_first() → ColumnOperators¶ geerbt von der
ColumnOperators.nulls_first()Methode vonColumnOperatorsErzeugt eine
nulls_first()-Klausel gegen das übergeordnete Objekt.Geändert in Version 1.4: Der Operator
nulls_first()wurde vonnullsfirst()in früheren Versionen umbenannt. Der vorherige Name bleibt für Abwärtskompatibilität verfügbar.
-
methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.nulls_last() → ColumnOperators¶ geerbt von der
ColumnOperators.nulls_last()Methode vonColumnOperatorsErzeugt eine
nulls_last()-Klausel gegen das übergeordnete Objekt.Geändert in Version 1.4: Der Operator
nulls_last()wurde vonnullslast()in früheren Versionen umbenannt. Der vorherige Name bleibt für Abwärtskompatibilität verfügbar.
-
methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.nullsfirst() → ColumnOperators¶ geerbt von der
ColumnOperators.nullsfirst()Methode vonColumnOperatorsErzeugt eine
nulls_first()-Klausel gegen das übergeordnete Objekt.Geändert in Version 1.4: Der Operator
nulls_first()wurde vonnullsfirst()in früheren Versionen umbenannt. Der vorherige Name bleibt für Abwärtskompatibilität verfügbar.
-
methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.nullslast() → ColumnOperators¶ geerbt von der
ColumnOperators.nullslast()Methode vonColumnOperatorsErzeugt eine
nulls_last()-Klausel gegen das übergeordnete Objekt.Geändert in Version 1.4: Der Operator
nulls_last()wurde vonnullslast()in früheren Versionen umbenannt. Der vorherige Name bleibt für Abwärtskompatibilität verfügbar.
-
methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.op(opstring: str, präzedenz: int = 0, ist_vergleich: bool = False, rückgabetyp: Type[TypeEngine[Any]] | TypeEngine[Any] | None = None, python_impl: Callable[..., Any] | None = None) → Callable[[Any], Operators]¶ geerbt von der
Operators.op()Methode vonOperatorsErzeugt eine generische Operatorfunktion.
z. B.
somecolumn.op("*")(5)
produziert
somecolumn * 5
Diese Funktion kann auch verwendet werden, um bitweise Operatoren explizit zu machen. Zum Beispiel
somecolumn.op("&")(0xFF)
ist ein bitweises UND des Wertes in
somecolumn.- Parameter:
opstring¶ – ein String, der als Infix-Operator zwischen diesem Element und dem an die generierte Funktion übergebenen Ausdruck ausgegeben wird.
präzedenz¶ –
die Priorität, die die Datenbank erwartungsgemäß auf den Operator in SQL-Ausdrücken anwenden soll. Dieser ganzzahlige Wert dient als Hinweis für den SQL-Compiler, wann explizite Klammern um eine bestimmte Operation gerendert werden sollen. Ein niedrigerer Wert führt dazu, dass der Ausdruck bei der Anwendung auf einen anderen Operator mit höherer Priorität geklammert wird. Der Standardwert von
0ist niedriger als alle Operatoren, außer dem Komma (,) und demASOperator. Ein Wert von 100 ist höher oder gleich allen Operatoren und -100 ist niedriger oder gleich allen Operatoren.Siehe auch
Ich benutze op() um einen benutzerdefinierten Operator zu generieren und meine Klammern werden nicht richtig gerendert - detaillierte Beschreibung, wie der SQLAlchemy SQL-Compiler Klammern rendert
ist_vergleich¶ –
veraltet; wenn True, wird der Operator als "Vergleichsoperator" betrachtet, d. h. er ergibt einen booleschen Wahr/Falsch-Wert, wie z. B.
==,>usw. Dieses Flag wird bereitgestellt, damit ORM-Beziehungen feststellen können, dass der Operator ein Vergleichsoperator ist, wenn er in einer benutzerdefinierten Join-Bedingung verwendet wird.Die Verwendung des Parameters
ist_vergleichwird durch die Verwendung der MethodeOperators.bool_op()ersetzt. Dieser prägnantere Operator setzt diesen Parameter automatisch, bietet aber auch eine korrekte PEP 484-Typunterstützung, da das zurückgegebene Objekt einen "booleschen" Datentyp ausdrückt, d.h.BinaryExpression[bool].rückgabetyp¶ – eine
TypeEngine-Klasse oder ein Objekt, das den Rückgabetyp eines von diesem Operator erzeugten Ausdrucks erzwingt. Standardmäßig werden Operatoren, dieOperators.op.ist_vergleichangeben, aufBooleanaufgelöst, und diejenigen, die dies nicht tun, haben denselben Typ wie der linke Operand.python_impl¶ –
eine optionale Python-Funktion, die zwei Python-Werte auf die gleiche Weise auswerten kann, wie dieser Operator auf dem Datenbankserver funktioniert. Nützlich für die SQL-Ausdrucksauswertung innerhalb von Python, z. B. für ORM-Hybridattribute und den ORM "Evaluator", der verwendet wird, um Objekte in einer Sitzung nach einem Mehrzeilen-Update oder -Löschvorgang abzugleichen.
z. B.
>>> expr = column("x").op("+", python_impl=lambda a, b: a + b)("y")
Der Operator für den obigen Ausdruck funktioniert auch für nicht-SQL-linke und rechte Objekte
>>> expr.operator(5, 10) 15
Neu in Version 2.0.
-
methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.operate(op: OperatorType, *andere: Any, **kwargs: Any) → Operators¶ geerbt von der
Operators.operate()Methode vonOperatorsOperiert auf einem Argument.
Dies ist die niedrigste Ebene der Operation, löst standardmäßig
NotImplementedErroraus.Das Überschreiben dieser Methode auf einer Unterklasse kann allgemeines Verhalten auf alle Operationen anwenden. Zum Beispiel kann das Überschreiben von
ColumnOperators, umfunc.lower()auf die linke und rechte Seite anzuwenden.class MyComparator(ColumnOperators): def operate(self, op, other, **kwargs): return op(func.lower(self), func.lower(other), **kwargs)
-
attribut
sqlalchemy.ext.associationproxy.AssociationProxyInstance.parent: _AssociationProxyProtocol[_T]¶
-
methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.regexp_match(muster: Any, flags: str | None = None) → ColumnOperators¶ geerbt von der
ColumnOperators.regexp_match()Methode vonColumnOperatorsImplementiert einen datenbankspezifischen „regexp match“-Operator.
Z. B.
stmt = select(table.c.some_column).where( table.c.some_column.regexp_match("^(b|c)") )
ColumnOperators.regexp_match()versucht, eine vom Backend bereitgestellte REGEXP-ähnliche Funktion oder einen Operator zu verwenden. Die spezifische Syntax regulärer Ausdrücke und die verfügbaren Flags sind jedoch **nicht Backend-agnostisch**.Beispiele hierfür sind:
PostgreSQL - rendert
x ~ yoderx !~ ybei Negation.Oracle Database - rendert
REGEXP_LIKE(x, y)SQLite - verwendet den Platzhalteroperator
REGEXPvon SQLite und ruft die Python-Builtin-Funktionre.match()auf.andere Backends können spezielle Implementierungen bereitstellen.
Backends ohne spezielle Implementierung geben den Operator als „REGEXP“ oder „NOT REGEXP“ aus. Dies ist beispielsweise mit SQLite und MySQL kompatibel.
Reguläre Ausdrucksunterstützung ist derzeit für Oracle Database, PostgreSQL, MySQL und MariaDB implementiert. Teilweise Unterstützung ist für SQLite verfügbar. Die Unterstützung bei Drittanbieter-Dialekten kann variieren.
- Parameter:
muster¶ – Der reguläre Ausdruck als String oder eine Spaltenklausel.
flags¶ – Alle anzuwendenden Flags für reguläre Ausdrücke, die nur als einfacher Python-String übergeben werden. Diese Flags sind Backend-spezifisch. Einige Backends wie PostgreSQL und MariaDB können die Flags alternativ als Teil des Musters angeben. Bei Verwendung des Ignorieren-Groß-/Kleinschreibung-Flags „i“ in PostgreSQL wird der REGEXP-Operator mit Ignorieren-Groß-/Kleinschreibung
~*oder!~*verwendet.
Neu in Version 1.4.
Geändert in Version 1.4.48,: 2.0.18 Aufgrund eines Implementierungsfehlers akzeptierte der Parameter „flags“ zuvor SQL-Ausdrucksobjekte wie Spaltenausdrücke zusätzlich zu einfachen Python-Strings. Diese Implementierung funktionierte nicht korrekt mit Caching und wurde entfernt; es sollten nur Strings für den Parameter „flags“ übergeben werden, da diese Flags als wörtliche Inline-Werte innerhalb von SQL-Ausdrücken gerendert werden.
Siehe auch
-
methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.regexp_replace(muster: Any, ersetzung: Any, flags: str | None = None) → ColumnOperators¶ geerbt von der
ColumnOperators.regexp_replace()Methode vonColumnOperatorsImplementiert einen datenbankspezifischen „regexp replace“-Operator.
Z. B.
stmt = select( table.c.some_column.regexp_replace("b(..)", "XY", flags="g") )
ColumnOperators.regexp_replace()versucht, eine REGEXP_REPLACE-ähnliche Funktion zu verwenden, die normalerweise die FunktionREGEXP_REPLACE()ausgibt. Die spezifische Syntax regulärer Ausdrücke und die verfügbaren Flags sind jedoch **nicht Backend-agnostisch**.Unterstützung für reguläre Ersetzungen ist derzeit für Oracle Database, PostgreSQL, MySQL 8 oder höher und MariaDB implementiert. Die Unterstützung bei Drittanbieter-Dialekten kann variieren.
- Parameter:
muster¶ – Der reguläre Ausdruck als String oder eine Spaltenklausel.
ersetzung¶ – Der Ersetzungs-String oder eine Spaltenklausel.
flags¶ – Alle anzuwendenden Flags für reguläre Ausdrücke, die nur als einfacher Python-String übergeben werden. Diese Flags sind Backend-spezifisch. Einige Backends wie PostgreSQL und MariaDB können die Flags alternativ als Teil des Musters angeben.
Neu in Version 1.4.
Geändert in Version 1.4.48,: 2.0.18 Aufgrund eines Implementierungsfehlers akzeptierte der Parameter „flags“ zuvor SQL-Ausdrucksobjekte wie Spaltenausdrücke zusätzlich zu einfachen Python-Strings. Diese Implementierung funktionierte nicht korrekt mit Caching und wurde entfernt; es sollten nur Strings für den Parameter „flags“ übergeben werden, da diese Flags als wörtliche Inline-Werte innerhalb von SQL-Ausdrücken gerendert werden.
Siehe auch
-
Attribut
sqlalchemy.ext.associationproxy.AssociationProxyInstance.remote_attr¶ Das durch diese
AssociationProxyInstancereferenzierte ‚remote‘ Klassenattribut.
-
Methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.reverse_operate(op: OperatorType, other: Any, **kwargs: Any) → Operators¶ geerbt von der
Operators.reverse_operate()Methode vonOperatorsUmgekehrte Operation auf ein Argument.
Die Verwendung ist dieselbe wie bei
operate().
-
Attribut
sqlalchemy.ext.associationproxy.AssociationProxyInstance.scalar¶ Gibt
Truezurück, wenn dieseAssociationProxyInstancelokal eine skalare Beziehung proxy-t.
-
Methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.set(obj: Any, values: _T) → None¶
-
Methode
sqlalchemy.ext.associationproxy.AssociationProxyInstance.startswith(other: Any, escape: str | None = None, autoescape: bool = False) → ColumnOperators¶ geerbt von der
ColumnOperators.startswith()Methode vonColumnOperatorsImplementiert den Operator
startswith.Erzeugt einen LIKE-Ausdruck, der gegen eine Übereinstimmung mit dem Anfang eines String-Wertes testet.
column LIKE <other> || '%'
Z. B.
stmt = select(sometable).where(sometable.c.column.startswith("foobar"))
Da der Operator
LIKEverwendet, verhalten sich Wildcard-Zeichen"%"und"_", die im <other>-Ausdruck vorhanden sind, ebenfalls wie Wildcards. Für literale Zeichenfolgenwerte kann das FlagColumnOperators.startswith.autoescapeaufTruegesetzt werden, um Vorkommen dieser Zeichen in der Zeichenfolgenwert zu escapen, damit sie als sie selbst und nicht als Wildcard-Zeichen übereinstimmen. Alternativ etabliert der ParameterColumnOperators.startswith.escapeein gegebenes Zeichen als Escape-Zeichen, was nützlich sein kann, wenn der Zielausdruck keine literale Zeichenfolge ist.- Parameter:
other¶ – Ausdruck, der verglichen werden soll. Dies ist normalerweise ein einfacher Zeichenfolgenwert, kann aber auch ein beliebiger SQL-Ausdruck sein. LIKE-Wildcard-Zeichen
%und_werden standardmäßig nicht escaped, es sei denn, das FlagColumnOperators.startswith.autoescapeist auf True gesetzt.autoescape¶ –
Boolean; wenn True, wird ein Escape-Zeichen innerhalb des LIKE-Ausdrucks etabliert und dann auf alle Vorkommen von
"%","_"und des Escape-Zeichens selbst im Vergleichswert angewendet, der als literaler String und nicht als SQL-Ausdruck angenommen wird.Ein Ausdruck wie
somecolumn.startswith("foo%bar", autoescape=True)
Wird gerendert als
somecolumn LIKE :param || '%' ESCAPE '/'
Mit dem Wert von
:paramals"foo/%bar".escape¶ –
ein Zeichen, das bei Angabe mit dem Schlüsselwort
ESCAPEgerendert wird, um dieses Zeichen als Escape-Zeichen zu etablieren. Dieses Zeichen kann dann vor Vorkommen von%und_gestellt werden, damit sie als sie selbst und nicht als Wildcard-Zeichen wirken.Ein Ausdruck wie
somecolumn.startswith("foo/%bar", escape="^")
Wird gerendert als
somecolumn LIKE :param || '%' ESCAPE '^'
Der Parameter kann auch mit
ColumnOperators.startswith.autoescapekombiniert werdensomecolumn.startswith("foo%bar^bat", escape="^", autoescape=True)
Wo oben der angegebene literale Parameter zu
"foo^%bar^^bat"konvertiert wird, bevor er an die Datenbank übergeben wird.
-
Attribut
sqlalchemy.ext.associationproxy.AssociationProxyInstance.target_class: Type[Any]¶ Die von dieser
AssociationProxyInstancebehandelte Zwischenklasse.Abgefangene Append-/Set-/Zuweisungsereignisse führen zur Erzeugung neuer Instanzen dieser Klasse.
-
Attribut
sqlalchemy.ext.associationproxy.AssociationProxyInstance.timetuple: Literal[None] = None¶ geerbt von dem
ColumnOperators.timetupleAttribut vonColumnOperatorsHack, erlaubt den Vergleich von Datetime-Objekten auf der linken Seite.
-
Methode
- Klasse sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance¶
eine
AssociationProxyInstance, die ein Objekt als Ziel hat.Mitglieder
__le__(), __lt__(), all_(), any(), any_(), asc(), attr, between(), bitwise_and(), bitwise_lshift(), bitwise_not(), bitwise_or(), bitwise_rshift(), bitwise_xor(), bool_op(), collate(), concat(), contains(), desc(), distinct(), endswith(), has(), icontains(), iendswith(), ilike(), in_(), is_(), is_distinct_from(), is_not(), is_not_distinct_from(), isnot(), isnot_distinct_from(), istartswith(), like(), local_attr, match(), not_ilike(), not_in(), not_like(), notilike(), notin_(), notlike(), nulls_first(), nulls_last(), nullsfirst(), nullslast(), op(), operate(), regexp_match(), regexp_replace(), remote_attr, reverse_operate(), scalar, startswith(), target_class, timetuple
Klassensignatur
class
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance(sqlalchemy.ext.associationproxy.AssociationProxyInstance)-
Methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.__le__(other: Any) → ColumnOperators¶ vererbt von der
sqlalchemy.sql.expression.ColumnOperators.__le__Methode vonColumnOperatorsImplementiert den Operator
<=.In einem Spaltenkontext wird die Klausel
a <= berzeugt.
-
Methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.__lt__(other: Any) → ColumnOperators¶ vererbt von der
sqlalchemy.sql.expression.ColumnOperators.__lt__Methode vonColumnOperatorsImplementiert den Operator
<.In einem Spaltenkontext wird die Klausel
a < berzeugt.
-
Methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.all_() → ColumnOperators¶ vererbt von der
ColumnOperators.all_()Methode vonColumnOperatorsErzeugt eine
all_()Klausel gegen das übergeordnete Objekt.Siehe die Dokumentation für
all_()für Beispiele.Hinweis
Achten Sie darauf, die neuere Methode
ColumnOperators.all_()nicht mit der Legacy-Version dieser Methode, der MethodeComparator.all(), die spezifisch fürARRAYist und einen anderen Aufrufstil verwendet, zu verwechseln.
-
Methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.any(criterion: _ColumnExpressionArgument[bool] | None = None, **kwargs: Any) → ColumnElement[bool]¶ geerbt von der
AssociationProxyInstance.any()Methode vonAssociationProxyInstanceErzeugt einen proxysteuerten 'any'-Ausdruck unter Verwendung von EXISTS.
Dieser Ausdruck wird ein zusammengesetztes Produkt sein, das die Operatoren
Comparator.any()und/oderComparator.has()der zugrunde liegenden proxysteuerten Attribute verwendet.
-
Methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.any_() → ColumnOperators¶ vererbt von der
ColumnOperators.any_()Methode vonColumnOperatorsErzeugt eine
any_()Klausel gegen das übergeordnete Objekt.Siehe die Dokumentation für
any_()für Beispiele.Hinweis
Achten Sie darauf, die neuere Methode
ColumnOperators.any_()nicht mit der Legacy-Version dieser Methode, der MethodeComparator.any(), die spezifisch fürARRAYist und einen anderen Aufrufstil verwendet, zu verwechseln.
-
Methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.asc() → ColumnOperators¶ vererbt von der
ColumnOperators.asc()Methode vonColumnOperatorsErzeugt eine
asc()Klausel gegen das übergeordnete Objekt.
-
Attribut
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.attr¶ geerbt von dem
AssociationProxyInstance.attrAttribut vonAssociationProxyInstanceGibt ein Tupel von
(local_attr, remote_attr)zurück.Dieses Attribut war ursprünglich dazu gedacht, die Methode
Query.join()zu erleichtern, um über beide Beziehungen gleichzeitig zu joinen, dies nutzt jedoch einen veralteten Aufrufstil.Um
select.join()oderQuery.join()mit einem Association Proxy zu verwenden, besteht die aktuelle Methode darin, die AttributeAssociationProxyInstance.local_attrundAssociationProxyInstance.remote_attrseparat zu verwenden.stmt = ( select(Parent) .join(Parent.proxied.local_attr) .join(Parent.proxied.remote_attr) )
Eine zukünftige Version könnte versuchen, ein prägnanteres Join-Muster für Association Proxy Attribute bereitzustellen.
-
Methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.between(cleft: Any, cright: Any, symmetric: bool = False) → ColumnOperators¶ geerbt von der
ColumnOperators.between()Methode vonColumnOperatorsErzeugt eine
between()-Klausel gegen das Elternobjekt, gegeben den unteren und oberen Bereich.
-
Methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.bitwise_and(other: Any) → ColumnOperators¶ geerbt von der
ColumnOperators.bitwise_and()Methode vonColumnOperatorsErzeugt eine bitweise AND-Operation, typischerweise über den Operator
&.Neu in Version 2.0.2.
Siehe auch
-
Methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.bitwise_lshift(other: Any) → ColumnOperators¶ geerbt von der
ColumnOperators.bitwise_lshift()Methode vonColumnOperatorsErzeugt eine bitweise LSHIFT-Operation, typischerweise über den Operator
<<.Neu in Version 2.0.2.
Siehe auch
-
Methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.bitwise_not() → ColumnOperators¶ geerbt von der
ColumnOperators.bitwise_not()Methode vonColumnOperatorsErzeugt eine bitweise NOT-Operation, typischerweise über den Operator
~.Neu in Version 2.0.2.
Siehe auch
-
Methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.bitwise_or(other: Any) → ColumnOperators¶ geerbt von der
ColumnOperators.bitwise_or()Methode vonColumnOperatorsErzeugt eine bitweise OR-Operation, typischerweise über den Operator
|.Neu in Version 2.0.2.
Siehe auch
-
Methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.bitwise_rshift(other: Any) → ColumnOperators¶ geerbt von der
ColumnOperators.bitwise_rshift()Methode vonColumnOperatorsErzeugt eine bitweise RSHIFT-Operation, typischerweise über den Operator
>>.Neu in Version 2.0.2.
Siehe auch
-
Methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.bitwise_xor(other: Any) → ColumnOperators¶ geerbt von der
ColumnOperators.bitwise_xor()Methode vonColumnOperatorsErzeugt eine bitweise XOR-Operation, typischerweise über den Operator
^oder#für PostgreSQL.Neu in Version 2.0.2.
Siehe auch
-
Methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.bool_op(opstring: str, precedence: int = 0, python_impl: Callable[[...], Any] | None = None) → Callable[[Any], Operators]¶ geerbt von der
Operators.bool_op()Methode vonOperatorsGibt einen benutzerdefinierten booleschen Operator zurück.
Diese Methode ist eine Kurzform für den Aufruf von
Operators.op()und die Übergabe des FlagsOperators.op.is_comparisonmit True. Ein wesentlicher Vorteil der Verwendung vonOperators.bool_op()ist, dass bei der Verwendung von Spaltenkonstrukten die "boolesche" Natur des zurückgegebenen Ausdrucks für PEP 484-Zwecke vorhanden ist.Siehe auch
-
Methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.collate(collation: str) → ColumnOperators¶ geerbt von der
ColumnOperators.collate()Methode vonColumnOperatorsErzeugt eine
collate()-Klausel gegen das Elternobjekt, gegeben den Collation-String.Siehe auch
-
Methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.concat(other: Any) → ColumnOperators¶ geerbt von der
ColumnOperators.concat()Methode vonColumnOperatorsImplementiert den 'concat'-Operator.
In einem Spaltenkontext erzeugt dies die Klausel
a || boder verwendet denconcat()-Operator unter MySQL.
-
Methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.contains(other: Any, **kw: Any) → ColumnElement[bool]¶ Erzeugt einen proxyt-en ‚contains‘-Ausdruck unter Verwendung von EXISTS.
Dieser Ausdruck ist ein zusammengesetztes Produkt, das die Operatoren
Comparator.any(),Comparator.has()und/oderComparator.contains()der zugrundeliegenden proxyt-ten Attribute verwendet.
-
methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.desc() → ColumnOperators¶ geerbt von der
ColumnOperators.desc()Methode vonColumnOperatorsErzeugt eine
desc()-Klausel gegen das Elternobjekt.
-
methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.distinct() → ColumnOperators¶ geerbt von der
ColumnOperators.distinct()Methode vonColumnOperatorsErzeugt eine
distinct()-Klausel gegen das Elternobjekt.
-
methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.endswith(other: Any, escape: str | None = None, autoescape: bool = False) → ColumnOperators¶ geerbt von der
ColumnOperators.endswith()Methode vonColumnOperatorsImplementiert den 'endswith'-Operator.
Erzeugt einen LIKE-Ausdruck, der gegen eine Übereinstimmung am Ende eines String-Wertes prüft.
column LIKE '%' || <other>
Z. B.
stmt = select(sometable).where(sometable.c.column.endswith("foobar"))
Da der Operator
LIKEverwendet, verhalten sich Wildcard-Zeichen"%"und"_", die im <other>-Ausdruck vorkommen, ebenfalls wie Wildcards. Für literale Zeichenkettenwerte kann das FlagColumnOperators.endswith.autoescapeaufTruegesetzt werden, um Escape-Zeichen für Vorkommen dieser Zeichen innerhalb des Zeichenkettenwerts anzuwenden, damit sie als sie selbst und nicht als Wildcard-Zeichen übereinstimmen. Alternativ etabliert der ParameterColumnOperators.endswith.escapeein gegebenes Zeichen als Escape-Zeichen, was nützlich sein kann, wenn der Zielausdruck keine literale Zeichenkette ist.- Parameter:
other¶ – Ausdruck, der verglichen werden soll. Dies ist normalerweise ein einfacher Zeichenkettenwert, kann aber auch ein beliebiger SQL-Ausdruck sein. LIKE-Wildcard-Zeichen
%und_werden standardmäßig nicht maskiert, es sei denn, das FlagColumnOperators.endswith.autoescapeist auf True gesetzt.autoescape¶ –
Boolean; wenn True, wird ein Escape-Zeichen innerhalb des LIKE-Ausdrucks etabliert und dann auf alle Vorkommen von
"%","_"und des Escape-Zeichens selbst im Vergleichswert angewendet, der als literaler String und nicht als SQL-Ausdruck angenommen wird.Ein Ausdruck wie
somecolumn.endswith("foo%bar", autoescape=True)
Wird gerendert als
somecolumn LIKE '%' || :param ESCAPE '/'
Mit dem Wert von
:paramals"foo/%bar".escape¶ –
ein Zeichen, das bei Angabe mit dem Schlüsselwort
ESCAPEgerendert wird, um dieses Zeichen als Escape-Zeichen zu etablieren. Dieses Zeichen kann dann vor Vorkommen von%und_gestellt werden, damit sie als sie selbst und nicht als Wildcard-Zeichen wirken.Ein Ausdruck wie
somecolumn.endswith("foo/%bar", escape="^")
Wird gerendert als
somecolumn LIKE '%' || :param ESCAPE '^'
Der Parameter kann auch mit
ColumnOperators.endswith.autoescapekombiniert werden.somecolumn.endswith("foo%bar^bat", escape="^", autoescape=True)
Wo oben der angegebene literale Parameter zu
"foo^%bar^^bat"konvertiert wird, bevor er an die Datenbank übergeben wird.
-
methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.has(criterion: _ColumnExpressionArgument[bool] | None = None, **kwargs: Any) → ColumnElement[bool]¶ geerbt von der
AssociationProxyInstance.has()Methode vonAssociationProxyInstanceErzeugt einen proxysierten „has“-Ausdruck unter Verwendung von EXISTS.
Dieser Ausdruck wird ein zusammengesetztes Produkt sein, das die Operatoren
Comparator.any()und/oderComparator.has()der zugrunde liegenden proxysteuerten Attribute verwendet.
-
methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.icontains(other: Any, **kw: Any) → ColumnOperators¶ geerbt von der
ColumnOperators.icontains()Methode vonColumnOperatorsImplementiert den
icontains-Operator, z. B. die Groß-/Kleinschreibung ignorierende Version vonColumnOperators.contains().Erzeugt einen LIKE-Ausdruck, der gegen eine unempfindliche Übereinstimmung in der Mitte eines Zeichenkettenwerts testet.
lower(column) LIKE '%' || lower(<other>) || '%'
Z. B.
stmt = select(sometable).where(sometable.c.column.icontains("foobar"))
Da der Operator
LIKEverwendet, fungieren Platzhalterzeichen"%"und"_", die im <other>-Ausdruck vorhanden sind, ebenfalls als Platzhalter. Für literale Zeichenfolgenwerte kann das FlagColumnOperators.icontains.autoescapeaufTruegesetzt werden, um Vorkommen dieser Zeichen innerhalb des Zeichenfolgenwerts zu escapen, damit sie als sie selbst und nicht als Platzhalterzeichen übereinstimmen. Alternativ etabliert der ParameterColumnOperators.icontains.escapeein gegebenes Zeichen als Escape-Zeichen, was nützlich sein kann, wenn der Zielausdruck keine literale Zeichenfolge ist.- Parameter:
other¶ – Ausdruck, der verglichen werden soll. Dies ist normalerweise ein einfacher Zeichenkettenwert, kann aber auch ein beliebiger SQL-Ausdruck sein. LIKE-Wildcard-Zeichen
%und_werden standardmäßig nicht maskiert, es sei denn, das FlagColumnOperators.icontains.autoescapeist auf True gesetzt.autoescape¶ –
Boolean; wenn True, wird ein Escape-Zeichen innerhalb des LIKE-Ausdrucks etabliert und dann auf alle Vorkommen von
"%","_"und des Escape-Zeichens selbst im Vergleichswert angewendet, der als literaler String und nicht als SQL-Ausdruck angenommen wird.Ein Ausdruck wie
somecolumn.icontains("foo%bar", autoescape=True)
Wird gerendert als
lower(somecolumn) LIKE '%' || lower(:param) || '%' ESCAPE '/'
Mit dem Wert von
:paramals"foo/%bar".escape¶ –
ein Zeichen, das bei Angabe mit dem Schlüsselwort
ESCAPEgerendert wird, um dieses Zeichen als Escape-Zeichen zu etablieren. Dieses Zeichen kann dann vor Vorkommen von%und_gestellt werden, damit sie als sie selbst und nicht als Wildcard-Zeichen wirken.Ein Ausdruck wie
somecolumn.icontains("foo/%bar", escape="^")
Wird gerendert als
lower(somecolumn) LIKE '%' || lower(:param) || '%' ESCAPE '^'
Der Parameter kann auch mit
ColumnOperators.contains.autoescapekombiniert werden.somecolumn.icontains("foo%bar^bat", escape="^", autoescape=True)
Wo oben der angegebene literale Parameter zu
"foo^%bar^^bat"konvertiert wird, bevor er an die Datenbank übergeben wird.
Siehe auch
-
methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.iendswith(other: Any, escape: str | None = None, autoescape: bool = False) → ColumnOperators¶ vererbt von der
ColumnOperators.iendswith()Methode vonColumnOperatorsImplementiert den Operator
iendswith, z. B. die Groß-/Kleinschreibung-unempfindliche Version vonColumnOperators.endswith().Erzeugt einen LIKE-Ausdruck, der gegen eine unempfindliche Übereinstimmung am Ende eines Zeichenkettenwerts testet.
lower(column) LIKE '%' || lower(<other>)
Z. B.
stmt = select(sometable).where(sometable.c.column.iendswith("foobar"))
Da der Operator
LIKEverwendet, fungieren Platzhalterzeichen"%"und"_", die im <other>-Ausdruck vorhanden sind, ebenfalls als Platzhalter. Für literale Zeichenfolgenwerte kann das FlagColumnOperators.iendswith.autoescapeaufTruegesetzt werden, um Vorkommen dieser Zeichen innerhalb des Zeichenfolgenwerts zu escapen, damit sie als sie selbst und nicht als Platzhalterzeichen übereinstimmen. Alternativ etabliert der ParameterColumnOperators.iendswith.escapeein gegebenes Zeichen als Escape-Zeichen, was nützlich sein kann, wenn der Zielausdruck keine literale Zeichenfolge ist.- Parameter:
other¶ – Ausdruck, der verglichen werden soll. Dies ist normalerweise ein einfacher Zeichenkettenwert, kann aber auch ein beliebiger SQL-Ausdruck sein. LIKE-Wildcard-Zeichen
%und_werden standardmäßig nicht maskiert, es sei denn, das FlagColumnOperators.iendswith.autoescapeist auf True gesetzt.autoescape¶ –
Boolean; wenn True, wird ein Escape-Zeichen innerhalb des LIKE-Ausdrucks etabliert und dann auf alle Vorkommen von
"%","_"und des Escape-Zeichens selbst im Vergleichswert angewendet, der als literaler String und nicht als SQL-Ausdruck angenommen wird.Ein Ausdruck wie
somecolumn.iendswith("foo%bar", autoescape=True)
Wird gerendert als
lower(somecolumn) LIKE '%' || lower(:param) ESCAPE '/'
Mit dem Wert von
:paramals"foo/%bar".escape¶ –
ein Zeichen, das bei Angabe mit dem Schlüsselwort
ESCAPEgerendert wird, um dieses Zeichen als Escape-Zeichen zu etablieren. Dieses Zeichen kann dann vor Vorkommen von%und_gestellt werden, damit sie als sie selbst und nicht als Wildcard-Zeichen wirken.Ein Ausdruck wie
somecolumn.iendswith("foo/%bar", escape="^")
Wird gerendert als
lower(somecolumn) LIKE '%' || lower(:param) ESCAPE '^'
Der Parameter kann auch mit
ColumnOperators.iendswith.autoescapekombiniert werdensomecolumn.endswith("foo%bar^bat", escape="^", autoescape=True)
Wo oben der angegebene literale Parameter zu
"foo^%bar^^bat"konvertiert wird, bevor er an die Datenbank übergeben wird.
Siehe auch
-
methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.ilike(other: Any, escape: str | None = None) → ColumnOperators¶ vererbt von der
ColumnOperators.ilike()Methode vonColumnOperatorsImplementiert den
ilikeOperator, z. B. die Groß-/Kleinschreibung-unabhängige LIKE-Abfrage.In einem Spaltenkontext wird ein Ausdruck erzeugt, entweder in der Form
lower(a) LIKE lower(other)
Oder auf Backends, die den ILIKE-Operator unterstützen
a ILIKE other
Z. B.
stmt = select(sometable).where(sometable.c.column.ilike("%foobar%"))
- Parameter:
Siehe auch
-
methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.in_(other: Any) → ColumnOperators¶ vererbt von der
ColumnOperators.in_()Methode vonColumnOperatorsImplementiert den
inOperator.In einem Spaltenkontext wird die Klausel
column IN <other>erzeugt.Der angegebene Parameter
otherkann seinEine Liste von literalen Werten, z. B.
stmt.where(column.in_([1, 2, 3]))
In dieser Aufrufform wird die Liste der Elemente in eine Menge von gebundenen Parametern der gleichen Länge wie die angegebene Liste umgewandelt.
WHERE COL IN (?, ?, ?)
Eine Liste von Tupeln kann bereitgestellt werden, wenn der Vergleich gegen ein
tuple_()mit mehreren Ausdrücken erfolgtfrom sqlalchemy import tuple_ stmt.where(tuple_(col1, col2).in_([(1, 10), (2, 20), (3, 30)]))
Eine leere Liste, z. B.
stmt.where(column.in_([]))
In dieser Aufrufform rendert der Ausdruck einen "leeren Mengen"-Ausdruck. Diese Ausdrücke sind auf einzelne Backends zugeschnitten und versuchen im Allgemeinen, eine leere SELECT-Anweisung als Unterabfrage zu erhalten. Auf SQLite ist der Ausdruck
WHERE col IN (SELECT 1 FROM (SELECT 1) WHERE 1!=1)
Geändert in Version 1.4: Leere IN-Ausdrücke verwenden nun in allen Fällen eine zur Laufzeit generierte SELECT-Unterabfrage.
Ein gebundener Parameter, z. B.
bindparam(), kann verwendet werden, wenn er das Flagbindparam.expandingenthältstmt.where(column.in_(bindparam("value", expanding=True)))
In dieser Aufrufform rendert der Ausdruck einen speziellen nicht-SQL-Platzhalter-Ausdruck, der wie folgt aussieht:
WHERE COL IN ([EXPANDING_value])
Dieser Platzhalter-Ausdruck wird zur Laufzeit der Anweisung abgefangen und in die variable Anzahl von gebundenen Parametern umgewandelt, wie zuvor gezeigt. Wenn die Anweisung ausgeführt würde als
connection.execute(stmt, {"value": [1, 2, 3]})
Die Datenbank würde für jeden Wert einen gebundenen Parameter erhalten.
WHERE COL IN (?, ?, ?)
Neu in Version 1.2: "expanding" gebundene Parameter hinzugefügt.
Wenn eine leere Liste übergeben wird, wird ein spezieller "leere Liste"-Ausdruck gerendert, der für die verwendete Datenbank spezifisch ist. Auf SQLite wäre dies
WHERE COL IN (SELECT 1 FROM (SELECT 1) WHERE 1!=1)
Neu in Version 1.3: "expanding" gebundene Parameter unterstützen nun leere Listen.
eine
select()-Konstruktion, die normalerweise eine korrelierte Skalarselektion iststmt.where( column.in_(select(othertable.c.y).where(table.c.x == othertable.c.x)) )
In dieser Aufrufform wird
ColumnOperators.in_()wie angegeben gerendertWHERE COL IN (SELECT othertable.y FROM othertable WHERE othertable.x = table.x)
- Parameter:
other¶ – eine Liste von Literalen, ein
select()-Konstrukt oder einbindparam()-Konstrukt, das das Flagbindparam.expandingauf True gesetzt enthält.
-
methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.is_(other: Any) → ColumnOperators¶ vererbt von der
ColumnOperators.is_()Methode vonColumnOperatorsImplementiert den
ISOperator.Normalerweise wird
ISautomatisch generiert, wenn mit einem Wert vonNoneverglichen wird, was zuNULLaufgelöst wird. Eine explizite Verwendung vonISkann jedoch wünschenswert sein, wenn auf bestimmten Plattformen mit booleschen Werten verglichen wird.Siehe auch
-
methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.is_distinct_from(other: Any) → ColumnOperators¶ vererbt von der
ColumnOperators.is_distinct_from()Methode vonColumnOperatorsImplementiert den
IS DISTINCT FROMOperator.Rendert auf den meisten Plattformen "a IS DISTINCT FROM b"; auf einigen wie SQLite möglicherweise "a IS NOT b".
-
methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.is_not(other: Any) → ColumnOperators¶ vererbt von der
ColumnOperators.is_not()Methode vonColumnOperatorsImplementiert den
IS NOTOperator.Normalerweise wird
IS NOTautomatisch generiert, wenn mit einem Wert vonNoneverglichen wird, was zuNULLaufgelöst wird. Eine explizite Verwendung vonIS NOTkann jedoch wünschenswert sein, wenn auf bestimmten Plattformen mit booleschen Werten verglichen wird.Geändert in Version 1.4: Der
is_not()Operator wurde vonisnot()in früheren Versionen umbenannt. Der vorherige Name bleibt aus Kompatibilitätsgründen erhalten.Siehe auch
-
methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.is_not_distinct_from(other: Any) → ColumnOperators¶ vererbt von der
ColumnOperators.isnot_distinct_from()Methode vonColumnOperatorsImplementiert den
IS NOT DISTINCT FROMOperator.Rendert auf den meisten Plattformen "a IS NOT DISTINCT FROM b"; auf einigen wie SQLite möglicherweise "a IS b".
Geändert in Version 1.4: Der
is_not_distinct_from()Operator wurde vonisnot_distinct_from()in früheren Versionen umbenannt. Der vorherige Name bleibt aus Kompatibilitätsgründen erhalten.
-
methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.isnot(other: Any) → ColumnOperators¶ vererbt von der
ColumnOperators.isnot()Methode vonColumnOperatorsImplementiert den
IS NOTOperator.Normalerweise wird
IS NOTautomatisch generiert, wenn mit einem Wert vonNoneverglichen wird, was zuNULLaufgelöst wird. Eine explizite Verwendung vonIS NOTkann jedoch wünschenswert sein, wenn auf bestimmten Plattformen mit booleschen Werten verglichen wird.Geändert in Version 1.4: Der
is_not()Operator wurde vonisnot()in früheren Versionen umbenannt. Der vorherige Name bleibt aus Kompatibilitätsgründen erhalten.Siehe auch
-
methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.isnot_distinct_from(other: Any) → ColumnOperators¶ vererbt von der
ColumnOperators.isnot_distinct_from()Methode vonColumnOperatorsImplementiert den
IS NOT DISTINCT FROMOperator.Rendert auf den meisten Plattformen "a IS NOT DISTINCT FROM b"; auf einigen wie SQLite möglicherweise "a IS b".
Geändert in Version 1.4: Der
is_not_distinct_from()Operator wurde vonisnot_distinct_from()in früheren Versionen umbenannt. Der vorherige Name bleibt aus Kompatibilitätsgründen erhalten.
-
methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.istartswith(other: Any, escape: str | None = None, autoescape: bool = False) → ColumnOperators¶ vererbt von der
ColumnOperators.istartswith()Methode vonColumnOperatorsImplementiert den Operator
istartswith, z. B. die Groß-/Kleinschreibung-unempfindliche Version vonColumnOperators.startswith().Erzeugt einen LIKE-Ausdruck, der gegen eine unempfindliche Übereinstimmung am Anfang eines Zeichenkettenwerts testet.
lower(column) LIKE lower(<other>) || '%'
Z. B.
stmt = select(sometable).where(sometable.c.column.istartswith("foobar"))
Da der Operator
LIKEverwendet, fungieren Platzhalterzeichen"%"und"_", die im <other>-Ausdruck vorhanden sind, ebenfalls als Platzhalter. Für literale Zeichenfolgenwerte kann das FlagColumnOperators.istartswith.autoescapeaufTruegesetzt werden, um Vorkommen dieser Zeichen innerhalb des Zeichenfolgenwerts zu escapen, damit sie als sie selbst und nicht als Platzhalterzeichen übereinstimmen. Alternativ etabliert der ParameterColumnOperators.istartswith.escapeein gegebenes Zeichen als Escape-Zeichen, was nützlich sein kann, wenn der Zielausdruck keine literale Zeichenfolge ist.- Parameter:
other¶ – Ausdruck, der verglichen werden soll. Dies ist normalerweise ein einfacher Zeichenkettenwert, kann aber auch ein beliebiger SQL-Ausdruck sein. LIKE-Wildcard-Zeichen
%und_werden standardmäßig nicht maskiert, es sei denn, das FlagColumnOperators.istartswith.autoescapeist auf True gesetzt.autoescape¶ –
Boolean; wenn True, wird ein Escape-Zeichen innerhalb des LIKE-Ausdrucks etabliert und dann auf alle Vorkommen von
"%","_"und des Escape-Zeichens selbst im Vergleichswert angewendet, der als literaler String und nicht als SQL-Ausdruck angenommen wird.Ein Ausdruck wie
somecolumn.istartswith("foo%bar", autoescape=True)
Wird gerendert als
lower(somecolumn) LIKE lower(:param) || '%' ESCAPE '/'
Mit dem Wert von
:paramals"foo/%bar".escape¶ –
ein Zeichen, das bei Angabe mit dem Schlüsselwort
ESCAPEgerendert wird, um dieses Zeichen als Escape-Zeichen zu etablieren. Dieses Zeichen kann dann vor Vorkommen von%und_gestellt werden, damit sie als sie selbst und nicht als Wildcard-Zeichen wirken.Ein Ausdruck wie
somecolumn.istartswith("foo/%bar", escape="^")
Wird gerendert als
lower(somecolumn) LIKE lower(:param) || '%' ESCAPE '^'
Der Parameter kann auch mit
ColumnOperators.istartswith.autoescapekombiniert werdensomecolumn.istartswith("foo%bar^bat", escape="^", autoescape=True)
Wo oben der angegebene literale Parameter zu
"foo^%bar^^bat"konvertiert wird, bevor er an die Datenbank übergeben wird.
Siehe auch
-
methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.like(other: Any, escape: str | None = None) → ColumnOperators¶ vererbt von der
ColumnOperators.like()Methode vonColumnOperatorsImplementiert den
likeOperator.In einem Spaltenkontext wird der Ausdruck erzeugt
a LIKE other
Z. B.
stmt = select(sometable).where(sometable.c.column.like("%foobar%"))
- Parameter:
Siehe auch
-
attribut
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.local_attr¶ geerbt von dem
AssociationProxyInstance.local_attrAttribut vonAssociationProxyInstanceDas „lokale“ Klassenattribut, auf das sich diese
AssociationProxyInstancebezieht.
-
methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.match(other: Any, **kwargs: Any) → ColumnOperators¶ vererbt von der
ColumnOperators.match()Methode vonColumnOperatorsImplementiert einen datenbankspezifischen 'match'-Operator.
ColumnOperators.match()versucht, zu einer MATCH-ähnlichen Funktion oder einem Operator aufzulösen, der von Backend bereitgestellt wird. Beispiele hierfür sindPostgreSQL - rendert
x @@ plainto_tsquery(y)Geändert in Version 2.0:
plainto_tsquery()wird nun anstelle vonto_tsquery()für PostgreSQL verwendet; weitere Informationen zu anderen Formen finden Sie unter Full Text Search.MySQL - rendert
MATCH (x) AGAINST (y IN BOOLEAN MODE)Siehe auch
match- MySQL-spezifische Konstruktion mit zusätzlichen Funktionen.Oracle Database - rendert
CONTAINS(x, y)andere Backends können spezielle Implementierungen bereitstellen.
Backends ohne spezielle Implementierung geben den Operator als „MATCH“ aus. Dies ist beispielsweise mit SQLite kompatibel.
-
methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.not_ilike(other: Any, escape: str | None = None) → ColumnOperators¶ geerbt von der
ColumnOperators.nicht_ilike()Methode vonColumnOperatorsImplementiert den
NOT ILIKEOperator.Dies ist äquivalent zur Verwendung von Negation mit
ColumnOperators.ilike(), d.h.~x.ilike(y).Geändert in Version 1.4: Der Operator
not_ilike()wurde vonnotilike()in früheren Versionen umbenannt. Der vorherige Name bleibt für Abwärtskompatibilität verfügbar.Siehe auch
-
methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.not_in(other: Any) → ColumnOperators¶ geerbt von der
ColumnOperators.nicht_in()Methode vonColumnOperatorsImplementiert den
NOT INOperator.Dies ist äquivalent zur Verwendung von Negation mit
ColumnOperators.in_(), d.h.~x.in_(y).Wenn
andereeine leere Sequenz ist, erzeugt der Compiler einen "leeren nicht in"-Ausdruck. Dies ist standardmäßig der Ausdruck "1 = 1", um in allen Fällen "wahr" zu erzeugen. Diecreate_engine.empty_in_strategykann verwendet werden, um dieses Verhalten zu ändern.Geändert in Version 1.4: Der Operator
not_in()wurde vonnotin_()in früheren Versionen umbenannt. Der vorherige Name bleibt für Abwärtskompatibilität verfügbar.Geändert in Version 1.2: Die Operatoren
ColumnOperators.in_()undColumnOperators.nicht_in()erzeugen standardmäßig einen "statischen" Ausdruck für eine leere IN-Sequenz.Siehe auch
-
methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.not_like(other: Any, escape: str | None = None) → ColumnOperators¶ geerbt von der
ColumnOperators.nicht_like()Methode vonColumnOperatorsImplementiert den
NOT LIKEOperator.Dies ist äquivalent zur Verwendung von Negation mit
ColumnOperators.like(), d.h.~x.like(y).Geändert in Version 1.4: Der Operator
not_like()wurde vonnotlike()in früheren Versionen umbenannt. Der vorherige Name bleibt für Abwärtskompatibilität verfügbar.Siehe auch
-
methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.notilike(other: Any, escape: str | None = None) → ColumnOperators¶ geerbt von der
ColumnOperators.nichtilike()Methode vonColumnOperatorsImplementiert den
NOT ILIKEOperator.Dies ist äquivalent zur Verwendung von Negation mit
ColumnOperators.ilike(), d.h.~x.ilike(y).Geändert in Version 1.4: Der Operator
not_ilike()wurde vonnotilike()in früheren Versionen umbenannt. Der vorherige Name bleibt für Abwärtskompatibilität verfügbar.Siehe auch
-
methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.notin_(other: Any) → ColumnOperators¶ geerbt von der
ColumnOperators.notin_()Methode vonColumnOperatorsImplementiert den
NOT INOperator.Dies ist äquivalent zur Verwendung von Negation mit
ColumnOperators.in_(), d.h.~x.in_(y).Wenn
andereeine leere Sequenz ist, erzeugt der Compiler einen "leeren nicht in"-Ausdruck. Dies ist standardmäßig der Ausdruck "1 = 1", um in allen Fällen "wahr" zu erzeugen. Diecreate_engine.empty_in_strategykann verwendet werden, um dieses Verhalten zu ändern.Geändert in Version 1.4: Der Operator
not_in()wurde vonnotin_()in früheren Versionen umbenannt. Der vorherige Name bleibt für Abwärtskompatibilität verfügbar.Geändert in Version 1.2: Die Operatoren
ColumnOperators.in_()undColumnOperators.nicht_in()erzeugen standardmäßig einen "statischen" Ausdruck für eine leere IN-Sequenz.Siehe auch
-
methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.notlike(other: Any, escape: str | None = None) → ColumnOperators¶ geerbt von der
ColumnOperators.nichtlike()Methode vonColumnOperatorsImplementiert den
NOT LIKEOperator.Dies ist äquivalent zur Verwendung von Negation mit
ColumnOperators.like(), d.h.~x.like(y).Geändert in Version 1.4: Der Operator
not_like()wurde vonnotlike()in früheren Versionen umbenannt. Der vorherige Name bleibt für Abwärtskompatibilität verfügbar.Siehe auch
-
methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.nulls_first() → ColumnOperators¶ geerbt von der
ColumnOperators.nulls_first()Methode vonColumnOperatorsErzeugt eine
nulls_first()-Klausel gegen das übergeordnete Objekt.Geändert in Version 1.4: Der Operator
nulls_first()wurde vonnullsfirst()in früheren Versionen umbenannt. Der vorherige Name bleibt für Abwärtskompatibilität verfügbar.
-
methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.nulls_last() → ColumnOperators¶ geerbt von der
ColumnOperators.nulls_last()Methode vonColumnOperatorsErzeugt eine
nulls_last()-Klausel gegen das übergeordnete Objekt.Geändert in Version 1.4: Der Operator
nulls_last()wurde vonnullslast()in früheren Versionen umbenannt. Der vorherige Name bleibt für Abwärtskompatibilität verfügbar.
-
methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.nullsfirst() → ColumnOperators¶ geerbt von der
ColumnOperators.nullsfirst()Methode vonColumnOperatorsErzeugt eine
nulls_first()-Klausel gegen das übergeordnete Objekt.Geändert in Version 1.4: Der Operator
nulls_first()wurde vonnullsfirst()in früheren Versionen umbenannt. Der vorherige Name bleibt für Abwärtskompatibilität verfügbar.
-
methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.nullslast() → ColumnOperators¶ geerbt von der
ColumnOperators.nullslast()Methode vonColumnOperatorsErzeugt eine
nulls_last()-Klausel gegen das übergeordnete Objekt.Geändert in Version 1.4: Der Operator
nulls_last()wurde vonnullslast()in früheren Versionen umbenannt. Der vorherige Name bleibt für Abwärtskompatibilität verfügbar.
-
methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.op(opstring: str, precedence: int = 0, is_comparison: bool = False, return_type: Type[TypeEngine[Any]] | TypeEngine[Any] | None = None, python_impl: Callable[..., Any] | None = None) → Callable[[Any], Operators]¶ geerbt von der
Operators.op()Methode vonOperatorsErzeugt eine generische Operatorfunktion.
z. B.
somecolumn.op("*")(5)
produziert
somecolumn * 5
Diese Funktion kann auch verwendet werden, um bitweise Operatoren explizit zu machen. Zum Beispiel
somecolumn.op("&")(0xFF)
ist ein bitweises UND des Wertes in
somecolumn.- Parameter:
opstring¶ – ein String, der als Infix-Operator zwischen diesem Element und dem an die generierte Funktion übergebenen Ausdruck ausgegeben wird.
precedence¶ –
die Priorität, die die Datenbank erwartungsgemäß auf den Operator in SQL-Ausdrücken anwenden soll. Dieser ganzzahlige Wert dient als Hinweis für den SQL-Compiler, wann explizite Klammern um eine bestimmte Operation gerendert werden sollen. Ein niedrigerer Wert führt dazu, dass der Ausdruck bei der Anwendung auf einen anderen Operator mit höherer Priorität geklammert wird. Der Standardwert von
0ist niedriger als alle Operatoren, außer dem Komma (,) und demASOperator. Ein Wert von 100 ist höher oder gleich allen Operatoren und -100 ist niedriger oder gleich allen Operatoren.Siehe auch
Ich benutze op() um einen benutzerdefinierten Operator zu generieren und meine Klammern werden nicht richtig gerendert - detaillierte Beschreibung, wie der SQLAlchemy SQL-Compiler Klammern rendert
is_comparison¶ –
veraltet; wenn True, wird der Operator als "Vergleichsoperator" betrachtet, d. h. er ergibt einen booleschen Wahr/Falsch-Wert, wie z. B.
==,>usw. Dieses Flag wird bereitgestellt, damit ORM-Beziehungen feststellen können, dass der Operator ein Vergleichsoperator ist, wenn er in einer benutzerdefinierten Join-Bedingung verwendet wird.Die Verwendung des Parameters
is_comparisonwird durch die Verwendung der MethodeOperators.bool_op()ersetzt; dieser prägnantere Operator setzt diesen Parameter automatisch, bietet aber auch korrekte PEP 484-Typunterstützung, da das zurückgegebene Objekt einen „boolean“-Datentyp ausdrückt, d. h.BinaryExpression[bool].return_type¶ – eine
TypeEngine-Klasse oder ein Objekt, das den Rückgabetyp eines von diesem Operator erzeugten Ausdrucks erzwingt. Standardmäßig werden Operatoren, dieOperators.op.is_comparisonangeben, zuBooleanaufgelöst, und diejenigen, die dies nicht tun, haben denselben Typ wie der linke Operand.python_impl¶ –
eine optionale Python-Funktion, die zwei Python-Werte auf die gleiche Weise auswerten kann, wie dieser Operator auf dem Datenbankserver funktioniert. Nützlich für die SQL-Ausdrucksauswertung innerhalb von Python, z. B. für ORM-Hybridattribute und den ORM "Evaluator", der verwendet wird, um Objekte in einer Sitzung nach einem Mehrzeilen-Update oder -Löschvorgang abzugleichen.
z. B.
>>> expr = column("x").op("+", python_impl=lambda a, b: a + b)("y")
Der Operator für den obigen Ausdruck funktioniert auch für nicht-SQL-linke und rechte Objekte
>>> expr.operator(5, 10) 15
Neu in Version 2.0.
-
methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.operate(op: OperatorType, *other: Any, **kwargs: Any) → Operators¶ geerbt von der
Operators.operate()Methode vonOperatorsOperiert auf einem Argument.
Dies ist die niedrigste Ebene der Operation, löst standardmäßig
NotImplementedErroraus.Das Überschreiben dieser Methode auf einer Unterklasse kann allgemeines Verhalten auf alle Operationen anwenden. Zum Beispiel kann das Überschreiben von
ColumnOperators, umfunc.lower()auf die linke und rechte Seite anzuwenden.class MyComparator(ColumnOperators): def operate(self, op, other, **kwargs): return op(func.lower(self), func.lower(other), **kwargs)
-
methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.regexp_match(pattern: Any, flags: str | None = None) → ColumnOperators¶ geerbt von der
ColumnOperators.regexp_match()Methode vonColumnOperatorsImplementiert einen datenbankspezifischen „regexp match“-Operator.
Z. B.
stmt = select(table.c.some_column).where( table.c.some_column.regexp_match("^(b|c)") )
ColumnOperators.regexp_match()versucht, eine vom Backend bereitgestellte REGEXP-ähnliche Funktion oder einen Operator zu verwenden. Die spezifische Syntax regulärer Ausdrücke und die verfügbaren Flags sind jedoch **nicht Backend-agnostisch**.Beispiele hierfür sind:
PostgreSQL - rendert
x ~ yoderx !~ ybei Negation.Oracle Database - rendert
REGEXP_LIKE(x, y)SQLite - verwendet den Platzhalteroperator
REGEXPvon SQLite und ruft die Python-Builtin-Funktionre.match()auf.andere Backends können spezielle Implementierungen bereitstellen.
Backends ohne spezielle Implementierung geben den Operator als „REGEXP“ oder „NOT REGEXP“ aus. Dies ist beispielsweise mit SQLite und MySQL kompatibel.
Reguläre Ausdrucksunterstützung ist derzeit für Oracle Database, PostgreSQL, MySQL und MariaDB implementiert. Teilweise Unterstützung ist für SQLite verfügbar. Die Unterstützung bei Drittanbieter-Dialekten kann variieren.
- Parameter:
pattern¶ – Das Muster für den regulären Ausdruck oder die Spaltenklausel.
flags¶ – Alle zu verwendenden Flags für reguläre Ausdrücke, nur als einfacher Python-String übergeben. Diese Flags sind vom Backend abhängig. Einige Backends wie PostgreSQL und MariaDB können die Flags alternativ als Teil des Musters angeben. Bei Verwendung des „Ignore Case“-Flags „i“ in PostgreSQL wird der „Ignore Case“-Operator für reguläre Ausdrücke
~*oder!~*verwendet.
Neu in Version 1.4.
Geändert in Version 1.4.48,: 2.0.18 Aufgrund eines Implementierungsfehlers akzeptierte der Parameter „flags“ zuvor SQL-Ausdrucksobjekte wie Spaltenausdrücke zusätzlich zu einfachen Python-Strings. Diese Implementierung funktionierte nicht korrekt mit Caching und wurde entfernt; es sollten nur Strings für den Parameter „flags“ übergeben werden, da diese Flags als wörtliche Inline-Werte innerhalb von SQL-Ausdrücken gerendert werden.
Siehe auch
-
methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.regexp_replace(pattern: Any, replacement: Any, flags: str | None = None) → ColumnOperators¶ geerbt von der
ColumnOperators.regexp_replace()Methode vonColumnOperatorsImplementiert einen datenbankspezifischen „regexp replace“-Operator.
Z. B.
stmt = select( table.c.some_column.regexp_replace("b(..)", "XY", flags="g") )
ColumnOperators.regexp_replace()versucht, eine REGEXP_REPLACE-ähnliche Funktion zu verwenden, die normalerweise die FunktionREGEXP_REPLACE()ausgibt. Die spezifische Syntax regulärer Ausdrücke und die verfügbaren Flags sind jedoch **nicht Backend-agnostisch**.Unterstützung für reguläre Ersetzungen ist derzeit für Oracle Database, PostgreSQL, MySQL 8 oder höher und MariaDB implementiert. Die Unterstützung bei Drittanbieter-Dialekten kann variieren.
- Parameter:
pattern¶ – Das Muster für den regulären Ausdruck oder die Spaltenklausel.
pattern¶ – Der Ersatz-String oder die Spaltenklausel.
flags¶ – Alle zu verwendenden Flags für reguläre Ausdrücke, nur als einfacher Python-String übergeben. Diese Flags sind vom Backend abhängig. Einige Backends wie PostgreSQL und MariaDB können die Flags alternativ als Teil des Musters angeben.
Neu in Version 1.4.
Geändert in Version 1.4.48,: 2.0.18 Aufgrund eines Implementierungsfehlers akzeptierte der Parameter „flags“ zuvor SQL-Ausdrucksobjekte wie Spaltenausdrücke zusätzlich zu einfachen Python-Strings. Diese Implementierung funktionierte nicht korrekt mit Caching und wurde entfernt; es sollten nur Strings für den Parameter „flags“ übergeben werden, da diese Flags als wörtliche Inline-Werte innerhalb von SQL-Ausdrücken gerendert werden.
Siehe auch
-
attribut
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.remote_attr¶ geerbt vom
AssociationProxyInstance.remote_attrAttribut vonAssociationProxyInstanceDas durch diese
AssociationProxyInstancereferenzierte ‚remote‘ Klassenattribut.
-
methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.reverse_operate(op: OperatorType, other: Any, **kwargs: Any) → Operators¶ geerbt von der
Operators.reverse_operate()Methode vonOperatorsUmgekehrte Operation auf ein Argument.
Die Verwendung ist dieselbe wie bei
operate().
-
attribut
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.scalar¶ geerbt vom
AssociationProxyInstance.scalarAttribut vonAssociationProxyInstanceGibt
Truezurück, wenn dieseAssociationProxyInstancelokal eine skalare Beziehung proxy-t.
-
methode
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.startswith(other: Any, escape: str | None = None, autoescape: bool = False) → ColumnOperators¶ geerbt von der
ColumnOperators.startswith()Methode vonColumnOperatorsImplementiert den Operator
startswith.Erzeugt einen LIKE-Ausdruck, der gegen eine Übereinstimmung mit dem Anfang eines String-Wertes testet.
column LIKE <other> || '%'
Z. B.
stmt = select(sometable).where(sometable.c.column.startswith("foobar"))
Da der Operator
LIKEverwendet, verhalten sich Wildcard-Zeichen"%"und"_", die im <other>-Ausdruck vorhanden sind, ebenfalls wie Wildcards. Für literale Zeichenfolgenwerte kann das FlagColumnOperators.startswith.autoescapeaufTruegesetzt werden, um Vorkommen dieser Zeichen in der Zeichenfolgenwert zu escapen, damit sie als sie selbst und nicht als Wildcard-Zeichen übereinstimmen. Alternativ etabliert der ParameterColumnOperators.startswith.escapeein gegebenes Zeichen als Escape-Zeichen, was nützlich sein kann, wenn der Zielausdruck keine literale Zeichenfolge ist.- Parameter:
other¶ – Ausdruck, der verglichen werden soll. Dies ist normalerweise ein einfacher String-Wert, kann aber auch ein beliebiger SQL-Ausdruck sein. LIKE-Wildcard-Zeichen
%und_werden standardmäßig nicht escaped, es sei denn, das FlagColumnOperators.startswith.autoescapeist auf True gesetzt.autoescape¶ –
Boolean; wenn True, wird ein Escape-Zeichen innerhalb des LIKE-Ausdrucks etabliert und dann auf alle Vorkommen von
"%","_"und des Escape-Zeichens selbst im Vergleichswert angewendet, der als literaler String und nicht als SQL-Ausdruck angenommen wird.Ein Ausdruck wie
somecolumn.startswith("foo%bar", autoescape=True)
Wird gerendert als
somecolumn LIKE :param || '%' ESCAPE '/'
Mit dem Wert von
:paramals"foo/%bar".escape¶ –
ein Zeichen, das bei Angabe mit dem Schlüsselwort
ESCAPEgerendert wird, um dieses Zeichen als Escape-Zeichen zu etablieren. Dieses Zeichen kann dann vor Vorkommen von%und_gestellt werden, damit sie als sie selbst und nicht als Wildcard-Zeichen wirken.Ein Ausdruck wie
somecolumn.startswith("foo/%bar", escape="^")
Wird gerendert als
somecolumn LIKE :param || '%' ESCAPE '^'
Der Parameter kann auch mit
ColumnOperators.startswith.autoescapekombiniert werdensomecolumn.startswith("foo%bar^bat", escape="^", autoescape=True)
Wo oben der angegebene literale Parameter zu
"foo^%bar^^bat"konvertiert wird, bevor er an die Datenbank übergeben wird.
-
attribut
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.target_class: Type[Any]¶ Die von dieser
AssociationProxyInstancebehandelte Zwischenklasse.Abgefangene Append-/Set-/Zuweisungsereignisse führen zur Erzeugung neuer Instanzen dieser Klasse.
-
attribut
sqlalchemy.ext.associationproxy.ObjectAssociationProxyInstance.timetuple: Literal[None] = None¶ geerbt von dem
ColumnOperators.timetupleAttribut vonColumnOperatorsHack, erlaubt den Vergleich von Datetime-Objekten auf der linken Seite.
-
Methode
- klasse sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance¶
eine
AssociationProxyInstance, die eine Datenbankspalte als Ziel hat.Mitglieder
__le__(), __lt__(), __ne__(), all_(), any(), any_(), asc(), attr, between(), bitwise_and(), bitwise_lshift(), bitwise_not(), bitwise_or(), bitwise_rshift(), bitwise_xor(), bool_op(), collate(), concat(), contains(), desc(), distinct(), endswith(), has(), icontains(), iendswith(), ilike(), in_(), is_(), is_distinct_from(), is_not(), is_not_distinct_from(), isnot(), isnot_distinct_from(), istartswith(), like(), local_attr, match(), not_ilike(), not_in(), not_like(), notilike(), notin_(), notlike(), nulls_first(), nulls_last(), nullsfirst(), nullslast(), op(), operate(), regexp_match(), regexp_replace(), remote_attr, reverse_operate(), scalar, startswith(), target_class, timetuple
Klassensignatur
klasse
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance(sqlalchemy.ext.associationproxy.AssociationProxyInstance)-
methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.__le__(other: Any) → ColumnOperators¶ vererbt von der
sqlalchemy.sql.expression.ColumnOperators.__le__Methode vonColumnOperatorsImplementiert den Operator
<=.In einem Spaltenkontext wird die Klausel
a <= berzeugt.
-
methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.__lt__(other: Any) → ColumnOperators¶ vererbt von der
sqlalchemy.sql.expression.ColumnOperators.__lt__Methode vonColumnOperatorsImplementiert den Operator
<.In einem Spaltenkontext wird die Klausel
a < berzeugt.
-
methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.__ne__(other: Any) → ColumnOperators¶ vererbt von der
sqlalchemy.sql.expression.ColumnOperators.__ne__Methode vonColumnOperatorsImplementiert den Operator
!=.In einem Spaltenkontext wird die Klausel
a != berzeugt. Wenn das ZielNoneist, wirda IS NOT NULLerzeugt.
-
methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.all_() → ColumnOperators¶ vererbt von der
ColumnOperators.all_()Methode vonColumnOperatorsErzeugt eine
all_()Klausel gegen das übergeordnete Objekt.Siehe die Dokumentation für
all_()für Beispiele.Hinweis
Achten Sie darauf, die neuere Methode
ColumnOperators.all_()nicht mit der Legacy-Version dieser Methode, der MethodeComparator.all(), die spezifisch fürARRAYist und einen anderen Aufrufstil verwendet, zu verwechseln.
-
methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.any(criterion: _ColumnExpressionArgument[bool] | None = None, **kwargs: Any) → ColumnElement[bool]¶ geerbt von der
AssociationProxyInstance.any()Methode vonAssociationProxyInstanceErzeugt einen proxysteuerten 'any'-Ausdruck unter Verwendung von EXISTS.
Dieser Ausdruck wird ein zusammengesetztes Produkt sein, das die Operatoren
Comparator.any()und/oderComparator.has()der zugrunde liegenden proxysteuerten Attribute verwendet.
-
methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.any_() → ColumnOperators¶ vererbt von der
ColumnOperators.any_()Methode vonColumnOperatorsErzeugt eine
any_()Klausel gegen das übergeordnete Objekt.Siehe die Dokumentation für
any_()für Beispiele.Hinweis
Achten Sie darauf, die neuere Methode
ColumnOperators.any_()nicht mit der Legacy-Version dieser Methode, der MethodeComparator.any(), die spezifisch fürARRAYist und einen anderen Aufrufstil verwendet, zu verwechseln.
-
methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.asc() → ColumnOperators¶ vererbt von der
ColumnOperators.asc()Methode vonColumnOperatorsErzeugt eine
asc()Klausel gegen das übergeordnete Objekt.
-
attribut
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.attr¶ geerbt von dem
AssociationProxyInstance.attrAttribut vonAssociationProxyInstanceGibt ein Tupel von
(local_attr, remote_attr)zurück.Dieses Attribut war ursprünglich dazu gedacht, die Methode
Query.join()zu erleichtern, um über beide Beziehungen gleichzeitig zu joinen, dies nutzt jedoch einen veralteten Aufrufstil.Um
select.join()oderQuery.join()mit einem Association Proxy zu verwenden, besteht die aktuelle Methode darin, die AttributeAssociationProxyInstance.local_attrundAssociationProxyInstance.remote_attrseparat zu verwenden.stmt = ( select(Parent) .join(Parent.proxied.local_attr) .join(Parent.proxied.remote_attr) )
Eine zukünftige Version könnte versuchen, ein prägnanteres Join-Muster für Association Proxy Attribute bereitzustellen.
-
methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.between(cleft: Any, cright: Any, symmetric: bool = False) → ColumnOperators¶ geerbt von der
ColumnOperators.between()Methode vonColumnOperatorsErzeugt eine
between()-Klausel gegen das Elternobjekt, gegeben den unteren und oberen Bereich.
-
methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.bitwise_and(other: Any) → ColumnOperators¶ geerbt von der
ColumnOperators.bitwise_and()Methode vonColumnOperatorsErzeugt eine bitweise AND-Operation, typischerweise über den Operator
&.Neu in Version 2.0.2.
Siehe auch
-
methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.bitwise_lshift(other: Any) → ColumnOperators¶ geerbt von der
ColumnOperators.bitwise_lshift()Methode vonColumnOperatorsErzeugt eine bitweise LSHIFT-Operation, typischerweise über den Operator
<<.Neu in Version 2.0.2.
Siehe auch
-
methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.bitwise_not() → ColumnOperators¶ geerbt von der
ColumnOperators.bitwise_not()Methode vonColumnOperatorsErzeugt eine bitweise NOT-Operation, typischerweise über den Operator
~.Neu in Version 2.0.2.
Siehe auch
-
Methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.bitwise_or(other: Any) → ColumnOperators¶ geerbt von der
ColumnOperators.bitwise_or()Methode vonColumnOperatorsErzeugt eine bitweise OR-Operation, typischerweise über den Operator
|.Neu in Version 2.0.2.
Siehe auch
-
Methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.bitwise_rshift(other: Any) → ColumnOperators¶ geerbt von der
ColumnOperators.bitwise_rshift()Methode vonColumnOperatorsErzeugt eine bitweise RSHIFT-Operation, typischerweise über den Operator
>>.Neu in Version 2.0.2.
Siehe auch
-
Methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.bitwise_xor(other: Any) → ColumnOperators¶ geerbt von der
ColumnOperators.bitwise_xor()Methode vonColumnOperatorsErzeugt eine bitweise XOR-Operation, typischerweise über den Operator
^oder#für PostgreSQL.Neu in Version 2.0.2.
Siehe auch
-
Methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.bool_op(opstring: str, precedence: int = 0, python_impl: Callable[[...], Any] | None = None) → Callable[[Any], Operators]¶ geerbt von der
Operators.bool_op()Methode vonOperatorsGibt einen benutzerdefinierten booleschen Operator zurück.
Diese Methode ist eine Kurzform für den Aufruf von
Operators.op()und das Übergeben des FlagsOperators.op.is_comparisonmit True. Ein wesentlicher Vorteil der Verwendung vonOperators.bool_op()ist, dass bei Verwendung von Spaltenkonstrukten die "boolesche" Natur des zurückgegebenen Ausdrucks für PEP 484 Zwecke vorhanden ist.Siehe auch
-
Methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.collate(collation: str) → ColumnOperators¶ geerbt von der
ColumnOperators.collate()Methode vonColumnOperatorsErzeugt eine
collate()-Klausel gegen das Elternobjekt, gegeben den Collation-String.Siehe auch
-
Methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.concat(other: Any) → ColumnOperators¶ geerbt von der
ColumnOperators.concat()Methode vonColumnOperatorsImplementiert den 'concat'-Operator.
In einem Spaltenkontext erzeugt dies die Klausel
a || boder verwendet denconcat()-Operator unter MySQL.
-
Methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.contains(other: Any, **kw: Any) → ColumnOperators¶ geerbt von der
ColumnOperators.contains()Methode vonColumnOperatorsImplementiert den 'contains'-Operator.
Erzeugt einen LIKE-Ausdruck, der gegen eine Übereinstimmung am Ende eines String-Wertes prüft.
column LIKE '%' || <other> || '%'
Z. B.
stmt = select(sometable).where(sometable.c.column.contains("foobar"))
Da der Operator
LIKEverwendet, verhalten sich Wildcard-Zeichen"%"und"_", die im <other>-Ausdruck vorkommen, ebenfalls wie Wildcards. Für literale Zeichenkettenwerte kann das FlagColumnOperators.contains.autoescapeaufTruegesetzt werden, um Escape-Zeichen für Vorkommen dieser Zeichen innerhalb des Zeichenkettenwerts anzuwenden, damit sie als sie selbst und nicht als Wildcard-Zeichen übereinstimmen. Alternativ etabliert der ParameterColumnOperators.contains.escapeein gegebenes Zeichen als Escape-Zeichen, was nützlich sein kann, wenn der Zielausdruck keine literale Zeichenkette ist.- Parameter:
other¶ – Ausdruck, der verglichen werden soll. Dies ist normalerweise ein einfacher Zeichenkettenwert, kann aber auch ein beliebiger SQL-Ausdruck sein. LIKE-Wildcard-Zeichen
%und_werden standardmäßig nicht escaped, es sei denn, das FlagColumnOperators.contains.autoescapeist auf True gesetzt.autoescape¶ –
Boolean; wenn True, wird ein Escape-Zeichen innerhalb des LIKE-Ausdrucks etabliert und dann auf alle Vorkommen von
"%","_"und des Escape-Zeichens selbst im Vergleichswert angewendet, der als literaler String und nicht als SQL-Ausdruck angenommen wird.Ein Ausdruck wie
somecolumn.contains("foo%bar", autoescape=True)
Wird gerendert als
somecolumn LIKE '%' || :param || '%' ESCAPE '/'
Mit dem Wert von
:paramals"foo/%bar".escape¶ –
ein Zeichen, das bei Angabe mit dem Schlüsselwort
ESCAPEgerendert wird, um dieses Zeichen als Escape-Zeichen zu etablieren. Dieses Zeichen kann dann vor Vorkommen von%und_gestellt werden, damit sie als sie selbst und nicht als Wildcard-Zeichen wirken.Ein Ausdruck wie
somecolumn.contains("foo/%bar", escape="^")
Wird gerendert als
somecolumn LIKE '%' || :param || '%' ESCAPE '^'
Der Parameter kann auch mit
ColumnOperators.contains.autoescapekombiniert werden.somecolumn.contains("foo%bar^bat", escape="^", autoescape=True)
Wo oben der angegebene literale Parameter zu
"foo^%bar^^bat"konvertiert wird, bevor er an die Datenbank übergeben wird.
-
Methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.desc() → ColumnOperators¶ geerbt von der
ColumnOperators.desc()Methode vonColumnOperatorsErzeugt eine
desc()-Klausel gegen das Elternobjekt.
-
Methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.distinct() → ColumnOperators¶ geerbt von der
ColumnOperators.distinct()Methode vonColumnOperatorsErzeugt eine
distinct()-Klausel gegen das Elternobjekt.
-
Methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.endswith(other: Any, escape: str | None = None, autoescape: bool = False) → ColumnOperators¶ geerbt von der
ColumnOperators.endswith()Methode vonColumnOperatorsImplementiert den 'endswith'-Operator.
Erzeugt einen LIKE-Ausdruck, der gegen eine Übereinstimmung am Ende eines String-Wertes prüft.
column LIKE '%' || <other>
Z. B.
stmt = select(sometable).where(sometable.c.column.endswith("foobar"))
Da der Operator
LIKEverwendet, verhalten sich Wildcard-Zeichen"%"und"_", die im <other>-Ausdruck vorkommen, ebenfalls wie Wildcards. Für literale Zeichenkettenwerte kann das FlagColumnOperators.endswith.autoescapeaufTruegesetzt werden, um Escape-Zeichen für Vorkommen dieser Zeichen innerhalb des Zeichenkettenwerts anzuwenden, damit sie als sie selbst und nicht als Wildcard-Zeichen übereinstimmen. Alternativ etabliert der ParameterColumnOperators.endswith.escapeein gegebenes Zeichen als Escape-Zeichen, was nützlich sein kann, wenn der Zielausdruck keine literale Zeichenkette ist.- Parameter:
other¶ – Ausdruck, der verglichen werden soll. Dies ist normalerweise ein einfacher Zeichenkettenwert, kann aber auch ein beliebiger SQL-Ausdruck sein. LIKE-Wildcard-Zeichen
%und_werden standardmäßig nicht escaped, es sei denn, das FlagColumnOperators.endswith.autoescapeist auf True gesetzt.autoescape¶ –
Boolean; wenn True, wird ein Escape-Zeichen innerhalb des LIKE-Ausdrucks etabliert und dann auf alle Vorkommen von
"%","_"und des Escape-Zeichens selbst im Vergleichswert angewendet, der als literaler String und nicht als SQL-Ausdruck angenommen wird.Ein Ausdruck wie
somecolumn.endswith("foo%bar", autoescape=True)
Wird gerendert als
somecolumn LIKE '%' || :param ESCAPE '/'
Mit dem Wert von
:paramals"foo/%bar".escape¶ –
ein Zeichen, das bei Angabe mit dem Schlüsselwort
ESCAPEgerendert wird, um dieses Zeichen als Escape-Zeichen zu etablieren. Dieses Zeichen kann dann vor Vorkommen von%und_gestellt werden, damit sie als sie selbst und nicht als Wildcard-Zeichen wirken.Ein Ausdruck wie
somecolumn.endswith("foo/%bar", escape="^")
Wird gerendert als
somecolumn LIKE '%' || :param ESCAPE '^'
Der Parameter kann auch mit
ColumnOperators.endswith.autoescapekombiniert werden.somecolumn.endswith("foo%bar^bat", escape="^", autoescape=True)
Wo oben der angegebene literale Parameter zu
"foo^%bar^^bat"konvertiert wird, bevor er an die Datenbank übergeben wird.
-
Methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.has(criterion: _ColumnExpressionArgument[bool] | None = None, **kwargs: Any) → ColumnElement[bool]¶ geerbt von der
AssociationProxyInstance.has()Methode vonAssociationProxyInstanceErzeugt einen proxysierten „has“-Ausdruck unter Verwendung von EXISTS.
Dieser Ausdruck wird ein zusammengesetztes Produkt sein, das die Operatoren
Comparator.any()und/oderComparator.has()der zugrunde liegenden proxysteuerten Attribute verwendet.
-
Methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.icontains(other: Any, **kw: Any) → ColumnOperators¶ geerbt von der
ColumnOperators.icontains()Methode vonColumnOperatorsImplementiert den
icontains-Operator, z. B. die Groß-/Kleinschreibung ignorierende Version vonColumnOperators.contains().Erzeugt einen LIKE-Ausdruck, der gegen eine unempfindliche Übereinstimmung in der Mitte eines Zeichenkettenwerts testet.
lower(column) LIKE '%' || lower(<other>) || '%'
Z. B.
stmt = select(sometable).where(sometable.c.column.icontains("foobar"))
Da der Operator
LIKEverwendet, fungieren Platzhalterzeichen"%"und"_", die im <other>-Ausdruck vorhanden sind, ebenfalls als Platzhalter. Für literale Zeichenfolgenwerte kann das FlagColumnOperators.icontains.autoescapeaufTruegesetzt werden, um Vorkommen dieser Zeichen innerhalb des Zeichenfolgenwerts zu escapen, damit sie als sie selbst und nicht als Platzhalterzeichen übereinstimmen. Alternativ etabliert der ParameterColumnOperators.icontains.escapeein gegebenes Zeichen als Escape-Zeichen, was nützlich sein kann, wenn der Zielausdruck keine literale Zeichenfolge ist.- Parameter:
other¶ – Ausdruck, der verglichen werden soll. Dies ist normalerweise ein einfacher Zeichenkettenwert, kann aber auch ein beliebiger SQL-Ausdruck sein. LIKE-Wildcard-Zeichen
%und_werden standardmäßig nicht escaped, es sei denn, das FlagColumnOperators.icontains.autoescapeist auf True gesetzt.autoescape¶ –
Boolean; wenn True, wird ein Escape-Zeichen innerhalb des LIKE-Ausdrucks etabliert und dann auf alle Vorkommen von
"%","_"und des Escape-Zeichens selbst im Vergleichswert angewendet, der als literaler String und nicht als SQL-Ausdruck angenommen wird.Ein Ausdruck wie
somecolumn.icontains("foo%bar", autoescape=True)
Wird gerendert als
lower(somecolumn) LIKE '%' || lower(:param) || '%' ESCAPE '/'
Mit dem Wert von
:paramals"foo/%bar".escape¶ –
ein Zeichen, das bei Angabe mit dem Schlüsselwort
ESCAPEgerendert wird, um dieses Zeichen als Escape-Zeichen zu etablieren. Dieses Zeichen kann dann vor Vorkommen von%und_gestellt werden, damit sie als sie selbst und nicht als Wildcard-Zeichen wirken.Ein Ausdruck wie
somecolumn.icontains("foo/%bar", escape="^")
Wird gerendert als
lower(somecolumn) LIKE '%' || lower(:param) || '%' ESCAPE '^'
Der Parameter kann auch mit
ColumnOperators.contains.autoescapekombiniert werden.somecolumn.icontains("foo%bar^bat", escape="^", autoescape=True)
Wo oben der angegebene literale Parameter zu
"foo^%bar^^bat"konvertiert wird, bevor er an die Datenbank übergeben wird.
Siehe auch
-
Methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.iendswith(other: Any, escape: str | None = None, autoescape: bool = False) → ColumnOperators¶ vererbt von der
ColumnOperators.iendswith()Methode vonColumnOperatorsImplementiert den Operator
iendswith, z. B. die Groß-/Kleinschreibung-unempfindliche Version vonColumnOperators.endswith().Erzeugt einen LIKE-Ausdruck, der gegen eine unempfindliche Übereinstimmung am Ende eines Zeichenkettenwerts testet.
lower(column) LIKE '%' || lower(<other>)
Z. B.
stmt = select(sometable).where(sometable.c.column.iendswith("foobar"))
Da der Operator
LIKEverwendet, fungieren Platzhalterzeichen"%"und"_", die im <other>-Ausdruck vorhanden sind, ebenfalls als Platzhalter. Für literale Zeichenfolgenwerte kann das FlagColumnOperators.iendswith.autoescapeaufTruegesetzt werden, um Vorkommen dieser Zeichen innerhalb des Zeichenfolgenwerts zu escapen, damit sie als sie selbst und nicht als Platzhalterzeichen übereinstimmen. Alternativ etabliert der ParameterColumnOperators.iendswith.escapeein gegebenes Zeichen als Escape-Zeichen, was nützlich sein kann, wenn der Zielausdruck keine literale Zeichenfolge ist.- Parameter:
other¶ – Ausdruck, der verglichen werden soll. Dies ist normalerweise ein einfacher Zeichenkettenwert, kann aber auch ein beliebiger SQL-Ausdruck sein. LIKE-Wildcard-Zeichen
%und_werden standardmäßig nicht escaped, es sei denn, das FlagColumnOperators.iendswith.autoescapeist auf True gesetzt.autoescape¶ –
Boolean; wenn True, wird ein Escape-Zeichen innerhalb des LIKE-Ausdrucks etabliert und dann auf alle Vorkommen von
"%","_"und des Escape-Zeichens selbst im Vergleichswert angewendet, der als literaler String und nicht als SQL-Ausdruck angenommen wird.Ein Ausdruck wie
somecolumn.iendswith("foo%bar", autoescape=True)
Wird gerendert als
lower(somecolumn) LIKE '%' || lower(:param) ESCAPE '/'
Mit dem Wert von
:paramals"foo/%bar".escape¶ –
ein Zeichen, das bei Angabe mit dem Schlüsselwort
ESCAPEgerendert wird, um dieses Zeichen als Escape-Zeichen zu etablieren. Dieses Zeichen kann dann vor Vorkommen von%und_gestellt werden, damit sie als sie selbst und nicht als Wildcard-Zeichen wirken.Ein Ausdruck wie
somecolumn.iendswith("foo/%bar", escape="^")
Wird gerendert als
lower(somecolumn) LIKE '%' || lower(:param) ESCAPE '^'
Der Parameter kann auch mit
ColumnOperators.iendswith.autoescapekombiniert werdensomecolumn.endswith("foo%bar^bat", escape="^", autoescape=True)
Wo oben der angegebene literale Parameter zu
"foo^%bar^^bat"konvertiert wird, bevor er an die Datenbank übergeben wird.
Siehe auch
-
Methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.ilike(other: Any, escape: str | None = None) → ColumnOperators¶ vererbt von der
ColumnOperators.ilike()Methode vonColumnOperatorsImplementiert den
ilikeOperator, z. B. die Groß-/Kleinschreibung-unabhängige LIKE-Abfrage.In einem Spaltenkontext wird ein Ausdruck erzeugt, entweder in der Form
lower(a) LIKE lower(other)
Oder auf Backends, die den ILIKE-Operator unterstützen
a ILIKE other
Z. B.
stmt = select(sometable).where(sometable.c.column.ilike("%foobar%"))
- Parameter:
Siehe auch
-
Methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.in_(other: Any) → ColumnOperators¶ vererbt von der
ColumnOperators.in_()Methode vonColumnOperatorsImplementiert den
inOperator.In einem Spaltenkontext wird die Klausel
column IN <other>erzeugt.Der angegebene Parameter
otherkann seinEine Liste von literalen Werten, z. B.
stmt.where(column.in_([1, 2, 3]))
In dieser Aufrufform wird die Liste der Elemente in eine Menge von gebundenen Parametern der gleichen Länge wie die angegebene Liste umgewandelt.
WHERE COL IN (?, ?, ?)
Eine Liste von Tupeln kann bereitgestellt werden, wenn der Vergleich gegen ein
tuple_()mit mehreren Ausdrücken erfolgtfrom sqlalchemy import tuple_ stmt.where(tuple_(col1, col2).in_([(1, 10), (2, 20), (3, 30)]))
Eine leere Liste, z. B.
stmt.where(column.in_([]))
In dieser Aufrufform rendert der Ausdruck einen "leeren Mengen"-Ausdruck. Diese Ausdrücke sind auf einzelne Backends zugeschnitten und versuchen im Allgemeinen, eine leere SELECT-Anweisung als Unterabfrage zu erhalten. Auf SQLite ist der Ausdruck
WHERE col IN (SELECT 1 FROM (SELECT 1) WHERE 1!=1)
Geändert in Version 1.4: Leere IN-Ausdrücke verwenden nun in allen Fällen eine zur Laufzeit generierte SELECT-Unterabfrage.
Ein gebundener Parameter, z. B.
bindparam(), kann verwendet werden, wenn er das Flagbindparam.expandingenthältstmt.where(column.in_(bindparam("value", expanding=True)))
In dieser Aufrufform rendert der Ausdruck einen speziellen nicht-SQL-Platzhalter-Ausdruck, der wie folgt aussieht:
WHERE COL IN ([EXPANDING_value])
Dieser Platzhalter-Ausdruck wird zur Laufzeit der Anweisung abgefangen und in die variable Anzahl von gebundenen Parametern umgewandelt, wie zuvor gezeigt. Wenn die Anweisung ausgeführt würde als
connection.execute(stmt, {"value": [1, 2, 3]})
Die Datenbank würde für jeden Wert einen gebundenen Parameter erhalten.
WHERE COL IN (?, ?, ?)
Neu in Version 1.2: "expanding" gebundene Parameter hinzugefügt.
Wenn eine leere Liste übergeben wird, wird ein spezieller "leere Liste"-Ausdruck gerendert, der für die verwendete Datenbank spezifisch ist. Auf SQLite wäre dies
WHERE COL IN (SELECT 1 FROM (SELECT 1) WHERE 1!=1)
Neu in Version 1.3: "expanding" gebundene Parameter unterstützen nun leere Listen.
eine
select()-Konstruktion, die normalerweise eine korrelierte Skalarselektion iststmt.where( column.in_(select(othertable.c.y).where(table.c.x == othertable.c.x)) )
In dieser Aufrufform wird
ColumnOperators.in_()wie angegeben gerendertWHERE COL IN (SELECT othertable.y FROM othertable WHERE othertable.x = table.x)
- Parameter:
other¶ – eine Liste von Literalen, ein
select()-Konstrukt oder einbindparam()-Konstrukt, das das Flagbindparam.expandingauf True gesetzt hat.
-
Methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.is_(other: Any) → ColumnOperators¶ vererbt von der
ColumnOperators.is_()Methode vonColumnOperatorsImplementiert den
ISOperator.Normalerweise wird
ISautomatisch generiert, wenn mit einem Wert vonNoneverglichen wird, was zuNULLaufgelöst wird. Eine explizite Verwendung vonISkann jedoch wünschenswert sein, wenn auf bestimmten Plattformen mit booleschen Werten verglichen wird.Siehe auch
-
Methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.is_distinct_from(other: Any) → ColumnOperators¶ vererbt von der
ColumnOperators.is_distinct_from()Methode vonColumnOperatorsImplementiert den
IS DISTINCT FROMOperator.Rendert auf den meisten Plattformen "a IS DISTINCT FROM b"; auf einigen wie SQLite möglicherweise "a IS NOT b".
-
Methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.is_not(other: Any) → ColumnOperators¶ vererbt von der
ColumnOperators.is_not()Methode vonColumnOperatorsImplementiert den
IS NOTOperator.Normalerweise wird
IS NOTautomatisch generiert, wenn mit einem Wert vonNoneverglichen wird, was zuNULLaufgelöst wird. Eine explizite Verwendung vonIS NOTkann jedoch wünschenswert sein, wenn auf bestimmten Plattformen mit booleschen Werten verglichen wird.Geändert in Version 1.4: Der
is_not()Operator wurde vonisnot()in früheren Versionen umbenannt. Der vorherige Name bleibt aus Kompatibilitätsgründen erhalten.Siehe auch
-
Methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.is_not_distinct_from(other: Any) → ColumnOperators¶ vererbt von der
ColumnOperators.isnot_distinct_from()Methode vonColumnOperatorsImplementiert den
IS NOT DISTINCT FROMOperator.Rendert auf den meisten Plattformen "a IS NOT DISTINCT FROM b"; auf einigen wie SQLite möglicherweise "a IS b".
Geändert in Version 1.4: Der
is_not_distinct_from()Operator wurde vonisnot_distinct_from()in früheren Versionen umbenannt. Der vorherige Name bleibt aus Kompatibilitätsgründen erhalten.
-
Methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.isnot(other: Any) → ColumnOperators¶ vererbt von der
ColumnOperators.isnot()Methode vonColumnOperatorsImplementiert den
IS NOTOperator.Normalerweise wird
IS NOTautomatisch generiert, wenn mit einem Wert vonNoneverglichen wird, was zuNULLaufgelöst wird. Eine explizite Verwendung vonIS NOTkann jedoch wünschenswert sein, wenn auf bestimmten Plattformen mit booleschen Werten verglichen wird.Geändert in Version 1.4: Der
is_not()Operator wurde vonisnot()in früheren Versionen umbenannt. Der vorherige Name bleibt aus Kompatibilitätsgründen erhalten.Siehe auch
-
Methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.isnot_distinct_from(other: Any) → ColumnOperators¶ vererbt von der
ColumnOperators.isnot_distinct_from()Methode vonColumnOperatorsImplementiert den
IS NOT DISTINCT FROMOperator.Rendert auf den meisten Plattformen "a IS NOT DISTINCT FROM b"; auf einigen wie SQLite möglicherweise "a IS b".
Geändert in Version 1.4: Der
is_not_distinct_from()Operator wurde vonisnot_distinct_from()in früheren Versionen umbenannt. Der vorherige Name bleibt aus Kompatibilitätsgründen erhalten.
-
Methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.istartswith(other: Any, escape: str | None = None, autoescape: bool = False) → ColumnOperators¶ vererbt von der
ColumnOperators.istartswith()Methode vonColumnOperatorsImplementiert den Operator
istartswith, z. B. die Groß-/Kleinschreibung-unempfindliche Version vonColumnOperators.startswith().Erzeugt einen LIKE-Ausdruck, der gegen eine unempfindliche Übereinstimmung am Anfang eines Zeichenkettenwerts testet.
lower(column) LIKE lower(<other>) || '%'
Z. B.
stmt = select(sometable).where(sometable.c.column.istartswith("foobar"))
Da der Operator
LIKEverwendet, fungieren Platzhalterzeichen"%"und"_", die im <other>-Ausdruck vorhanden sind, ebenfalls als Platzhalter. Für literale Zeichenfolgenwerte kann das FlagColumnOperators.istartswith.autoescapeaufTruegesetzt werden, um Vorkommen dieser Zeichen innerhalb des Zeichenfolgenwerts zu escapen, damit sie als sie selbst und nicht als Platzhalterzeichen übereinstimmen. Alternativ etabliert der ParameterColumnOperators.istartswith.escapeein gegebenes Zeichen als Escape-Zeichen, was nützlich sein kann, wenn der Zielausdruck keine literale Zeichenfolge ist.- Parameter:
other¶ – Ausdruck, der verglichen werden soll. Dies ist normalerweise ein einfacher Zeichenkettenwert, kann aber auch ein beliebiger SQL-Ausdruck sein. LIKE-Wildcard-Zeichen
%und_werden standardmäßig nicht escaped, es sei denn, das FlagColumnOperators.istartswith.autoescapeist auf True gesetzt.autoescape¶ –
Boolean; wenn True, wird ein Escape-Zeichen innerhalb des LIKE-Ausdrucks etabliert und dann auf alle Vorkommen von
"%","_"und des Escape-Zeichens selbst im Vergleichswert angewendet, der als literaler String und nicht als SQL-Ausdruck angenommen wird.Ein Ausdruck wie
somecolumn.istartswith("foo%bar", autoescape=True)
Wird gerendert als
lower(somecolumn) LIKE lower(:param) || '%' ESCAPE '/'
Mit dem Wert von
:paramals"foo/%bar".escape¶ –
ein Zeichen, das bei Angabe mit dem Schlüsselwort
ESCAPEgerendert wird, um dieses Zeichen als Escape-Zeichen zu etablieren. Dieses Zeichen kann dann vor Vorkommen von%und_gestellt werden, damit sie als sie selbst und nicht als Wildcard-Zeichen wirken.Ein Ausdruck wie
somecolumn.istartswith("foo/%bar", escape="^")
Wird gerendert als
lower(somecolumn) LIKE lower(:param) || '%' ESCAPE '^'
Der Parameter kann auch mit
ColumnOperators.istartswith.autoescapekombiniert werdensomecolumn.istartswith("foo%bar^bat", escape="^", autoescape=True)
Wo oben der angegebene literale Parameter zu
"foo^%bar^^bat"konvertiert wird, bevor er an die Datenbank übergeben wird.
Siehe auch
-
Methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.like(other: Any, escape: str | None = None) → ColumnOperators¶ vererbt von der
ColumnOperators.like()Methode vonColumnOperatorsImplementiert den
likeOperator.In einem Spaltenkontext wird der Ausdruck erzeugt
a LIKE other
Z. B.
stmt = select(sometable).where(sometable.c.column.like("%foobar%"))
- Parameter:
Siehe auch
-
attribut
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.local_attr¶ geerbt von dem
AssociationProxyInstance.local_attrAttribut vonAssociationProxyInstanceDas „lokale“ Klassenattribut, auf das sich diese
AssociationProxyInstancebezieht.
-
methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.match(other: Any, **kwargs: Any) → ColumnOperators¶ vererbt von der
ColumnOperators.match()Methode vonColumnOperatorsImplementiert einen datenbankspezifischen 'match'-Operator.
ColumnOperators.match()versucht, zu einer MATCH-ähnlichen Funktion oder einem Operator aufzulösen, der von Backend bereitgestellt wird. Beispiele hierfür sindPostgreSQL - rendert
x @@ plainto_tsquery(y)Geändert in Version 2.0:
plainto_tsquery()wird nun anstelle vonto_tsquery()für PostgreSQL verwendet; weitere Informationen zu anderen Formen finden Sie unter Full Text Search.MySQL - rendert
MATCH (x) AGAINST (y IN BOOLEAN MODE)Siehe auch
match- MySQL-spezifische Konstruktion mit zusätzlichen Funktionen.Oracle Database - rendert
CONTAINS(x, y)andere Backends können spezielle Implementierungen bereitstellen.
Backends ohne spezielle Implementierung geben den Operator als „MATCH“ aus. Dies ist beispielsweise mit SQLite kompatibel.
-
methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.not_ilike(other: Any, escape: str | None = None) → ColumnOperators¶ geerbt von der
ColumnOperators.nicht_ilike()Methode vonColumnOperatorsImplementiert den
NOT ILIKEOperator.Dies ist äquivalent zur Verwendung von Negation mit
ColumnOperators.ilike(), d.h.~x.ilike(y).Geändert in Version 1.4: Der Operator
not_ilike()wurde vonnotilike()in früheren Versionen umbenannt. Der vorherige Name bleibt für Abwärtskompatibilität verfügbar.Siehe auch
-
methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.not_in(other: Any) → ColumnOperators¶ geerbt von der
ColumnOperators.nicht_in()Methode vonColumnOperatorsImplementiert den
NOT INOperator.Dies ist äquivalent zur Verwendung von Negation mit
ColumnOperators.in_(), d.h.~x.in_(y).Wenn
andereeine leere Sequenz ist, erzeugt der Compiler einen "leeren nicht in"-Ausdruck. Dies ist standardmäßig der Ausdruck "1 = 1", um in allen Fällen "wahr" zu erzeugen. Diecreate_engine.empty_in_strategykann verwendet werden, um dieses Verhalten zu ändern.Geändert in Version 1.4: Der Operator
not_in()wurde vonnotin_()in früheren Versionen umbenannt. Der vorherige Name bleibt für Abwärtskompatibilität verfügbar.Geändert in Version 1.2: Die Operatoren
ColumnOperators.in_()undColumnOperators.nicht_in()erzeugen standardmäßig einen "statischen" Ausdruck für eine leere IN-Sequenz.Siehe auch
-
methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.not_like(other: Any, escape: str | None = None) → ColumnOperators¶ geerbt von der
ColumnOperators.nicht_like()Methode vonColumnOperatorsImplementiert den
NOT LIKEOperator.Dies ist äquivalent zur Verwendung von Negation mit
ColumnOperators.like(), d.h.~x.like(y).Geändert in Version 1.4: Der Operator
not_like()wurde vonnotlike()in früheren Versionen umbenannt. Der vorherige Name bleibt für Abwärtskompatibilität verfügbar.Siehe auch
-
methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.notilike(other: Any, escape: str | None = None) → ColumnOperators¶ geerbt von der
ColumnOperators.nichtilike()Methode vonColumnOperatorsImplementiert den
NOT ILIKEOperator.Dies ist äquivalent zur Verwendung von Negation mit
ColumnOperators.ilike(), d.h.~x.ilike(y).Geändert in Version 1.4: Der Operator
not_ilike()wurde vonnotilike()in früheren Versionen umbenannt. Der vorherige Name bleibt für Abwärtskompatibilität verfügbar.Siehe auch
-
methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.notin_(other: Any) → ColumnOperators¶ geerbt von der
ColumnOperators.notin_()Methode vonColumnOperatorsImplementiert den
NOT INOperator.Dies ist äquivalent zur Verwendung von Negation mit
ColumnOperators.in_(), d.h.~x.in_(y).Wenn
andereeine leere Sequenz ist, erzeugt der Compiler einen "leeren nicht in"-Ausdruck. Dies ist standardmäßig der Ausdruck "1 = 1", um in allen Fällen "wahr" zu erzeugen. Diecreate_engine.empty_in_strategykann verwendet werden, um dieses Verhalten zu ändern.Geändert in Version 1.4: Der Operator
not_in()wurde vonnotin_()in früheren Versionen umbenannt. Der vorherige Name bleibt für Abwärtskompatibilität verfügbar.Geändert in Version 1.2: Die Operatoren
ColumnOperators.in_()undColumnOperators.nicht_in()erzeugen standardmäßig einen "statischen" Ausdruck für eine leere IN-Sequenz.Siehe auch
-
methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.notlike(other: Any, escape: str | None = None) → ColumnOperators¶ geerbt von der
ColumnOperators.nichtlike()Methode vonColumnOperatorsImplementiert den
NOT LIKEOperator.Dies ist äquivalent zur Verwendung von Negation mit
ColumnOperators.like(), d.h.~x.like(y).Geändert in Version 1.4: Der Operator
not_like()wurde vonnotlike()in früheren Versionen umbenannt. Der vorherige Name bleibt für Abwärtskompatibilität verfügbar.Siehe auch
-
methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.nulls_first() → ColumnOperators¶ geerbt von der
ColumnOperators.nulls_first()Methode vonColumnOperatorsErzeugt eine
nulls_first()-Klausel gegen das übergeordnete Objekt.Geändert in Version 1.4: Der Operator
nulls_first()wurde vonnullsfirst()in früheren Versionen umbenannt. Der vorherige Name bleibt für Abwärtskompatibilität verfügbar.
-
methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.nulls_last() → ColumnOperators¶ geerbt von der
ColumnOperators.nulls_last()Methode vonColumnOperatorsErzeugt eine
nulls_last()-Klausel gegen das übergeordnete Objekt.Geändert in Version 1.4: Der Operator
nulls_last()wurde vonnullslast()in früheren Versionen umbenannt. Der vorherige Name bleibt für Abwärtskompatibilität verfügbar.
-
methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.nullsfirst() → ColumnOperators¶ geerbt von der
ColumnOperators.nullsfirst()Methode vonColumnOperatorsErzeugt eine
nulls_first()-Klausel gegen das übergeordnete Objekt.Geändert in Version 1.4: Der Operator
nulls_first()wurde vonnullsfirst()in früheren Versionen umbenannt. Der vorherige Name bleibt für Abwärtskompatibilität verfügbar.
-
methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.nullslast() → ColumnOperators¶ geerbt von der
ColumnOperators.nullslast()Methode vonColumnOperatorsErzeugt eine
nulls_last()-Klausel gegen das übergeordnete Objekt.Geändert in Version 1.4: Der Operator
nulls_last()wurde vonnullslast()in früheren Versionen umbenannt. Der vorherige Name bleibt für Abwärtskompatibilität verfügbar.
-
methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.op(opstring: str, precedence: int = 0, is_comparison: bool = False, return_type: Type[TypeEngine[Any]] | TypeEngine[Any] | None = None, python_impl: Callable[..., Any] | None = None) → Callable[[Any], Operators]¶ geerbt von der
Operators.op()Methode vonOperatorsErzeugt eine generische Operatorfunktion.
z. B.
somecolumn.op("*")(5)
produziert
somecolumn * 5
Diese Funktion kann auch verwendet werden, um bitweise Operatoren explizit zu machen. Zum Beispiel
somecolumn.op("&")(0xFF)
ist ein bitweises UND des Wertes in
somecolumn.- Parameter:
opstring¶ – ein String, der als Infix-Operator zwischen diesem Element und dem an die generierte Funktion übergebenen Ausdruck ausgegeben wird.
precedence¶ –
die Priorität, die die Datenbank erwartungsgemäß auf den Operator in SQL-Ausdrücken anwenden soll. Dieser ganzzahlige Wert dient als Hinweis für den SQL-Compiler, wann explizite Klammern um eine bestimmte Operation gerendert werden sollen. Ein niedrigerer Wert führt dazu, dass der Ausdruck bei der Anwendung auf einen anderen Operator mit höherer Priorität geklammert wird. Der Standardwert von
0ist niedriger als alle Operatoren, außer dem Komma (,) und demASOperator. Ein Wert von 100 ist höher oder gleich allen Operatoren und -100 ist niedriger oder gleich allen Operatoren.Siehe auch
Ich benutze op() um einen benutzerdefinierten Operator zu generieren und meine Klammern werden nicht richtig gerendert - detaillierte Beschreibung, wie der SQLAlchemy SQL-Compiler Klammern rendert
is_comparison¶ –
veraltet; wenn True, wird der Operator als "Vergleichsoperator" betrachtet, d. h. er ergibt einen booleschen Wahr/Falsch-Wert, wie z. B.
==,>usw. Dieses Flag wird bereitgestellt, damit ORM-Beziehungen feststellen können, dass der Operator ein Vergleichsoperator ist, wenn er in einer benutzerdefinierten Join-Bedingung verwendet wird.Die Verwendung des Parameters
is_comparisonwird durch die Verwendung der MethodeOperators.bool_op()ersetzt. Dieser prägnantere Operator setzt diesen Parameter automatisch, bietet aber auch korrekte PEP 484-Typunterstützung, da das zurückgegebene Objekt einen „booleschen“ Datentyp ausdrückt, d.h.BinaryExpression[bool].return_type¶ – eine
TypeEngine-Klasse oder ein Objekt, das den Rückgabetyp eines von diesem Operator erzeugten Ausdrucks erzwingt. Standardmäßig werden Operatoren, dieOperators.op.is_comparisonangeben, zuBooleanaufgelöst, und diejenigen, die dies nicht tun, haben denselben Typ wie der linke Operand.python_impl¶ –
eine optionale Python-Funktion, die zwei Python-Werte auf die gleiche Weise auswerten kann, wie dieser Operator auf dem Datenbankserver funktioniert. Nützlich für die SQL-Ausdrucksauswertung innerhalb von Python, z. B. für ORM-Hybridattribute und den ORM "Evaluator", der verwendet wird, um Objekte in einer Sitzung nach einem Mehrzeilen-Update oder -Löschvorgang abzugleichen.
z. B.
>>> expr = column("x").op("+", python_impl=lambda a, b: a + b)("y")
Der Operator für den obigen Ausdruck funktioniert auch für nicht-SQL-linke und rechte Objekte
>>> expr.operator(5, 10) 15
Neu in Version 2.0.
-
methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.operate(op: OperatorType, *other: Any, **kwargs: Any) → ColumnElement[Any]¶ Operiert auf einem Argument.
Dies ist die niedrigste Ebene der Operation, löst standardmäßig
NotImplementedErroraus.Das Überschreiben dieser Methode auf einer Unterklasse kann allgemeines Verhalten auf alle Operationen anwenden. Zum Beispiel kann das Überschreiben von
ColumnOperators, umfunc.lower()auf die linke und rechte Seite anzuwenden.class MyComparator(ColumnOperators): def operate(self, op, other, **kwargs): return op(func.lower(self), func.lower(other), **kwargs)
-
methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.regexp_match(pattern: Any, flags: str | None = None) → ColumnOperators¶ geerbt von der
ColumnOperators.regexp_match()Methode vonColumnOperatorsImplementiert einen datenbankspezifischen „regexp match“-Operator.
Z. B.
stmt = select(table.c.some_column).where( table.c.some_column.regexp_match("^(b|c)") )
ColumnOperators.regexp_match()versucht, eine vom Backend bereitgestellte REGEXP-ähnliche Funktion oder einen Operator zu verwenden. Die spezifische Syntax regulärer Ausdrücke und die verfügbaren Flags sind jedoch **nicht Backend-agnostisch**.Beispiele hierfür sind:
PostgreSQL - rendert
x ~ yoderx !~ ybei Negation.Oracle Database - rendert
REGEXP_LIKE(x, y)SQLite - verwendet den Platzhalteroperator
REGEXPvon SQLite und ruft die Python-Builtin-Funktionre.match()auf.andere Backends können spezielle Implementierungen bereitstellen.
Backends ohne spezielle Implementierung geben den Operator als „REGEXP“ oder „NOT REGEXP“ aus. Dies ist beispielsweise mit SQLite und MySQL kompatibel.
Reguläre Ausdrucksunterstützung ist derzeit für Oracle Database, PostgreSQL, MySQL und MariaDB implementiert. Teilweise Unterstützung ist für SQLite verfügbar. Die Unterstützung bei Drittanbieter-Dialekten kann variieren.
- Parameter:
pattern¶ – Der reguläre Ausdruck als String oder Spaltenklausel.
flags¶ – Alle regulären Ausdrucks-Flags, die angewendet werden sollen, nur als einfacher Python-String. Diese Flags sind Backend-spezifisch. Einige Backends wie PostgreSQL und MariaDB können die Flags auch als Teil des Musters angeben. Bei Verwendung des Flags „i“ für Groß-/Kleinschreibung in PostgreSQL wird der Operator für reguläre Ausdrücke mit Ignorierung der Groß-/Kleinschreibung
~*oder!~*verwendet.
Neu in Version 1.4.
Geändert in Version 1.4.48,: 2.0.18 Aufgrund eines Implementierungsfehlers akzeptierte der Parameter „flags“ zuvor SQL-Ausdrucksobjekte wie Spaltenausdrücke zusätzlich zu einfachen Python-Strings. Diese Implementierung funktionierte nicht korrekt mit Caching und wurde entfernt; es sollten nur Strings für den Parameter „flags“ übergeben werden, da diese Flags als wörtliche Inline-Werte innerhalb von SQL-Ausdrücken gerendert werden.
Siehe auch
-
methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.regexp_replace(pattern: Any, replacement: Any, flags: str | None = None) → ColumnOperators¶ geerbt von der
ColumnOperators.regexp_replace()Methode vonColumnOperatorsImplementiert einen datenbankspezifischen „regexp replace“-Operator.
Z. B.
stmt = select( table.c.some_column.regexp_replace("b(..)", "XY", flags="g") )
ColumnOperators.regexp_replace()versucht, eine REGEXP_REPLACE-ähnliche Funktion zu verwenden, die normalerweise die FunktionREGEXP_REPLACE()ausgibt. Die spezifische Syntax regulärer Ausdrücke und die verfügbaren Flags sind jedoch **nicht Backend-agnostisch**.Unterstützung für reguläre Ersetzungen ist derzeit für Oracle Database, PostgreSQL, MySQL 8 oder höher und MariaDB implementiert. Die Unterstützung bei Drittanbieter-Dialekten kann variieren.
- Parameter:
pattern¶ – Der reguläre Ausdruck als String oder Spaltenklausel.
pattern¶ – Der Ersatzstring oder die Spaltenklausel.
flags¶ – Alle regulären Ausdrucks-Flags, die angewendet werden sollen, nur als einfacher Python-String. Diese Flags sind Backend-spezifisch. Einige Backends wie PostgreSQL und MariaDB können die Flags auch als Teil des Musters angeben.
Neu in Version 1.4.
Geändert in Version 1.4.48,: 2.0.18 Aufgrund eines Implementierungsfehlers akzeptierte der Parameter „flags“ zuvor SQL-Ausdrucksobjekte wie Spaltenausdrücke zusätzlich zu einfachen Python-Strings. Diese Implementierung funktionierte nicht korrekt mit Caching und wurde entfernt; es sollten nur Strings für den Parameter „flags“ übergeben werden, da diese Flags als wörtliche Inline-Werte innerhalb von SQL-Ausdrücken gerendert werden.
Siehe auch
-
attribut
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.remote_attr¶ geerbt vom
AssociationProxyInstance.remote_attrAttribut vonAssociationProxyInstanceDas durch diese
AssociationProxyInstancereferenzierte ‚remote‘ Klassenattribut.
-
methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.reverse_operate(op: OperatorType, other: Any, **kwargs: Any) → Operators¶ geerbt von der
Operators.reverse_operate()Methode vonOperatorsUmgekehrte Operation auf ein Argument.
Die Verwendung ist dieselbe wie bei
operate().
-
attribut
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.scalar¶ geerbt vom
AssociationProxyInstance.scalarAttribut vonAssociationProxyInstanceGibt
Truezurück, wenn dieseAssociationProxyInstancelokal eine skalare Beziehung proxy-t.
-
methode
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.startswith(other: Any, escape: str | None = None, autoescape: bool = False) → ColumnOperators¶ geerbt von der
ColumnOperators.startswith()Methode vonColumnOperatorsImplementiert den Operator
startswith.Erzeugt einen LIKE-Ausdruck, der gegen eine Übereinstimmung mit dem Anfang eines String-Wertes testet.
column LIKE <other> || '%'
Z. B.
stmt = select(sometable).where(sometable.c.column.startswith("foobar"))
Da der Operator
LIKEverwendet, verhalten sich Wildcard-Zeichen"%"und"_", die im <other>-Ausdruck vorhanden sind, ebenfalls wie Wildcards. Für literale Zeichenfolgenwerte kann das FlagColumnOperators.startswith.autoescapeaufTruegesetzt werden, um Vorkommen dieser Zeichen in der Zeichenfolgenwert zu escapen, damit sie als sie selbst und nicht als Wildcard-Zeichen übereinstimmen. Alternativ etabliert der ParameterColumnOperators.startswith.escapeein gegebenes Zeichen als Escape-Zeichen, was nützlich sein kann, wenn der Zielausdruck keine literale Zeichenfolge ist.- Parameter:
other¶ – Ausdruck, der verglichen werden soll. Dies ist normalerweise ein einfacher Stringwert, kann aber auch ein beliebiger SQL-Ausdruck sein. LIKE-Platzhalterzeichen
%und_werden standardmäßig nicht escaped, es sei denn, das FlagColumnOperators.startswith.autoescapeist auf True gesetzt.autoescape¶ –
Boolean; wenn True, wird ein Escape-Zeichen innerhalb des LIKE-Ausdrucks etabliert und dann auf alle Vorkommen von
"%","_"und des Escape-Zeichens selbst im Vergleichswert angewendet, der als literaler String und nicht als SQL-Ausdruck angenommen wird.Ein Ausdruck wie
somecolumn.startswith("foo%bar", autoescape=True)
Wird gerendert als
somecolumn LIKE :param || '%' ESCAPE '/'
Mit dem Wert von
:paramals"foo/%bar".escape¶ –
ein Zeichen, das bei Angabe mit dem Schlüsselwort
ESCAPEgerendert wird, um dieses Zeichen als Escape-Zeichen zu etablieren. Dieses Zeichen kann dann vor Vorkommen von%und_gestellt werden, damit sie als sie selbst und nicht als Wildcard-Zeichen wirken.Ein Ausdruck wie
somecolumn.startswith("foo/%bar", escape="^")
Wird gerendert als
somecolumn LIKE :param || '%' ESCAPE '^'
Der Parameter kann auch mit
ColumnOperators.startswith.autoescapekombiniert werdensomecolumn.startswith("foo%bar^bat", escape="^", autoescape=True)
Wo oben der angegebene literale Parameter zu
"foo^%bar^^bat"konvertiert wird, bevor er an die Datenbank übergeben wird.
-
attribut
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.target_class: Type[Any]¶ Die von dieser
AssociationProxyInstancebehandelte Zwischenklasse.Abgefangene Append-/Set-/Zuweisungsereignisse führen zur Erzeugung neuer Instanzen dieser Klasse.
-
attribut
sqlalchemy.ext.associationproxy.ColumnAssociationProxyInstance.timetuple: Literal[None] = None¶ geerbt von dem
ColumnOperators.timetupleAttribut vonColumnOperatorsHack, erlaubt den Vergleich von Datetime-Objekten auf der linken Seite.
-
methode
- klasse sqlalchemy.ext.associationproxy.AssociationProxyExtensionType¶
Eine Aufzählung.
Mitglieder
Klassensignatur
class
sqlalchemy.ext.associationproxy.AssociationProxyExtensionType(sqlalchemy.orm.base.InspectionAttrExtensionType)-
attribut
sqlalchemy.ext.associationproxy.AssociationProxyExtensionType.ASSOCIATION_PROXY = 'ASSOCIATION_PROXY'¶ Symbol, das ein
InspectionAttrangibt, das vom TypAssociationProxyist.Wird dem Attribut
InspectionAttr.extension_typezugewiesen.
-
attribut
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