Внутренние компоненты ORM¶
Здесь перечислены ключевые конструкции ORM, которые не рассматриваются в других разделах.
Object Name | Description |
---|---|
Жетон, распространяемый по всей цепочке событий атрибута. |
|
Предоставить интерфейс проверки, соответствующий определенному атрибуту на определенном сопоставленном объекте. |
|
Следит за опциями, отправленными в |
|
Отслеживает информацию о состоянии на уровне класса. |
|
Описывает атрибут объекта, который соответствует столбцу таблицы или другому выражению столбца. |
|
Декларативно-совместимый внешний интерфейс для класса |
|
Определяет «составной» сопоставленный атрибут, представляющий коллекцию столбцов как один атрибут. |
|
Базовый класс, применяемый ко всем объектам и атрибутам ORM, которые связаны с вещами, которые могут быть возвращены функцией |
|
Символы, указывающие на тип расширения, частью которого является |
|
Добавляет атрибут |
|
отслеживает информацию о состоянии на уровне экземпляра. |
|
Базовый класс для объектов descriptor, которые перехватывают события атрибутов от имени объекта |
|
Перечисление. |
|
Представляет сопоставленный атрибут ORM на сопоставленном классе. |
|
Отображает один |
|
Декларативный внешний интерфейс для класса |
|
Представляют определенный атрибут класса, отображаемый с помощью |
|
merge_frozen_result(session, statement, frozen_result[, load]) |
Объединить |
merge_result(query, iterator[, load]) |
Объединить результат в сессию данного объекта |
Перечисление. |
|
Определяет операции SQL для сопоставленных атрибутов ORM. |
|
Базовый класс для объектов descriptor, которые перехватывают события атрибутов от имени объекта |
|
Описывает свойство объекта, которое содержит один элемент или список элементов, соответствующих связанной таблице базы данных. |
|
перечисление, которое указывает «направление» |
|
Описывает свойство объекта, которое содержит один элемент или список элементов, соответствующих связанной таблице базы данных. |
|
Тип, который может использоваться для обозначения любого атрибута или объекта ORM-уровня, который действует вместо одного, в контексте построения SQL-выражения. |
|
Декларативный внешний интерфейс для класса |
|
Обозначьте имя атрибута как синоним сопоставленного свойства, в том смысле, что атрибут будет отражать значение и поведение выражения другого атрибута. |
|
- class sqlalchemy.orm.AttributeState¶
Предоставить интерфейс проверки, соответствующий определенному атрибуту на определенном сопоставленном объекте.
Доступ к объекту
AttributeState
осуществляется через коллекциюInstanceState.attrs
конкретногоInstanceState
:Members
from sqlalchemy import inspect insp = inspect(some_mapped_object) attr_state = insp.attrs.some_attribute
-
attribute
sqlalchemy.orm.AttributeState.
history¶ Возвращает текущую историю изменений pre-flush для этого атрибута через интерфейс
History
.Этот метод не будет испускать вызовы загрузчика, если значение атрибута выгружено.
Примечание
Система истории атрибутов отслеживает изменения на основе каждой промывки. Каждый раз, когда
Session
промывается, история каждого атрибута сбрасывается в пустоту. По умолчаниюSession
автоматически очищается каждый раз, когда вызываетсяQuery
. Для получения информации о том, как управлять этим, смотрите Промывка.См.также
AttributeState.load_history()
- получение истории с помощью вызываемых файлов загрузчика, если значение не присутствует локально.get_history()
- базовая функция
-
method
sqlalchemy.orm.AttributeState.
load_history() History ¶ Возвращает текущую историю изменений pre-flush для этого атрибута через интерфейс
History
.Этот метод будет испускать callables загрузчика, если значение атрибута выгружено.
Примечание
Система истории атрибутов отслеживает изменения на основе каждой промывки. Каждый раз, когда
Session
промывается, история каждого атрибута сбрасывается в пустоту. По умолчаниюSession
автоматически очищается каждый раз, когда вызываетсяQuery
. Для получения информации о том, как управлять этим, смотрите Промывка.
-
attribute
sqlalchemy.orm.AttributeState.
loaded_value¶ Текущее значение этого атрибута, загруженное из базы данных.
Если значение не было загружено или иным образом отсутствует в словаре объекта, возвращается NO_VALUE.
-
attribute
sqlalchemy.orm.AttributeState.
value¶ Возвращает значение этого атрибута.
Эта операция эквивалентна доступу к атрибуту объекта напрямую или через
getattr()
, и при необходимости запустит все ожидающие вызовы загрузчика.
-
attribute
- class sqlalchemy.orm.CascadeOptions¶
Следит за опциями, отправленными в
relationship.cascade
.Классная подпись
класс
sqlalchemy.orm.CascadeOptions
(builtins.frozenset
,typing.Generic
)
- class sqlalchemy.orm.ClassManager¶
Отслеживает информацию о состоянии на уровне класса.
Members
deferred_scalar_loader, expired_attribute_loader, has_parent(), manage(), state_getter(), unregister()
Классная подпись
class
sqlalchemy.orm.ClassManager
(sqlalchemy.util.langhelpers.HasMemoized
,builtins.dict
,typing.Generic
,sqlalchemy.event.registry.EventTarget
)-
attribute
sqlalchemy.orm.ClassManager.
deferred_scalar_loader¶ Не рекомендуется, начиная с версии 1.4: Атрибут ClassManager.deferred_scalar_loader теперь называется expired_attribute_loader
-
attribute
sqlalchemy.orm.ClassManager.
expired_attribute_loader: _ExpiredAttributeLoaderProto¶ ранее известный как deferred_scalar_loader
-
method
sqlalchemy.orm.ClassManager.
has_parent(state: InstanceState[_O], key: str, optimistic: bool = False) bool ¶ TODO
-
method
sqlalchemy.orm.ClassManager.
manage()¶ Пометьте этот экземпляр как менеджер для своего класса.
-
method
sqlalchemy.orm.ClassManager.
state_getter()¶ Return a (instance) -> InstanceState callable.
Вызовы «state getter» должны вызывать либо KeyError, либо AttributeError, если для экземпляра не найден InstanceState.
-
method
sqlalchemy.orm.ClassManager.
unregister() None ¶ удалить все инструменты, установленные этим ClassManager.
-
attribute
- class sqlalchemy.orm.ColumnProperty¶
Описывает атрибут объекта, который соответствует столбцу таблицы или другому выражению столбца.
Публичный конструктор - это функция
column_property()
.Members
expressions, operate(), reverse_operate(), columns_to_assign, declarative_scan(), do_init(), expression, instrument_class(), mapper_property_to_assign, merge()
Классная подпись
class
sqlalchemy.orm.ColumnProperty
(sqlalchemy.orm._MapsColumns
,sqlalchemy.orm.StrategizedProperty
,sqlalchemy.orm._IntrospectsAnnotations
,sqlalchemy.log.Identified
)- class Comparator¶
Производить булевы, сравнительные и другие операторы для атрибутов
ColumnProperty
.Краткий обзор см. в документации для
PropComparator
.Классная подпись
класс
sqlalchemy.orm.ColumnProperty.Comparator
(sqlalchemy.util.langhelpers.MemoizedSlots
,sqlalchemy.orm.PropComparator
)-
attribute
sqlalchemy.orm.ColumnProperty.Comparator.
expressions: Sequence[NamedColumn[Any]]¶ - Полная последовательность столбцов, на которые ссылается данный
атрибут, скорректированный с учетом происходящего алиасинга.
Добавлено в версии 1.3.17.
См.также
Сопоставление класса с несколькими таблицами - пример использования
-
method
sqlalchemy.orm.ColumnProperty.Comparator.
operate(op: OperatorType, *other: Any, **kwargs: Any) ColumnElement[Any] ¶ Оперировать с аргументом.
Это самый низкий уровень работы, по умолчанию поднимает
NotImplementedError
.Переопределение этого параметра в подклассе может позволить применять общее поведение ко всем операциям. Например, переопределение
ColumnOperators
для примененияfunc.lower()
к левой и правой стороне:class MyComparator(ColumnOperators): def operate(self, op, other, **kwargs): return op(func.lower(self), func.lower(other), **kwargs)
- Параметры:
op – Вызов оператора.
*other – «другая» сторона операции. Для большинства операций это будет один скаляр.
**kwargs – модификаторы. Они могут передаваться специальными операторами, такими как
ColumnOperators.contains()
.
-
method
sqlalchemy.orm.ColumnProperty.Comparator.
reverse_operate(op: OperatorType, other: Any, **kwargs: Any) ColumnElement[Any] ¶ Обратное действие над аргументом.
Используется так же, как и
operate()
.
-
attribute
-
attribute
sqlalchemy.orm.ColumnProperty.
columns_to_assign¶
-
method
sqlalchemy.orm.ColumnProperty.
declarative_scan(decl_scan: _ClassScanMapperConfig, registry: _RegistryType, cls: Type[Any], originating_module: Optional[str], key: str, mapped_container: Optional[Type[Mapped[Any]]], annotation: Optional[_AnnotationScanType], extracted_mapped_annotation: Optional[_AnnotationScanType], is_dataclass_field: bool) None ¶ Выполняйте специфическую для класса инициализацию на ранних стадиях декларативного сканирования.
Добавлено в версии 2.0.
-
method
sqlalchemy.orm.ColumnProperty.
do_init() None ¶ Выполните шаги инициализации, специфичные для подклассов, после создания картографа.
Это шаблонный метод, вызываемый методом init() объекта
MapperProperty
.
-
attribute
sqlalchemy.orm.ColumnProperty.
expression¶ Возвращает первичный столбец или выражение для данного ColumnProperty.
Например:
class File(Base): # ... name = Column(String(64)) extension = Column(String(8)) filename = column_property(name + '.' + extension) path = column_property('C:/' + filename.expression)
-
method
sqlalchemy.orm.ColumnProperty.
instrument_class(mapper: Mapper[Any]) None ¶ Крючок, вызываемый маппером свойства для инициирования инструментации атрибута класса, управляемого этим MapperProperty.
Здесь MapperProperty обычно обращается к модулю атрибутов для установки InstrumentedAttribute.
Этот шаг является первым из двух шагов для установки InstrumentedAttribute, и вызывается в самом начале процесса настройки маппера.
Вторым шагом обычно является шаг init_class_attribute, вызываемый из StrategizedProperty через хук post_instrument_class(). Этот шаг назначает дополнительное состояние InstrumentedAttribute (в частности, «impl»), которое было определено после того, как MapperProperty определил, какой тип управления персистентностью ему нужно сделать (например, скаляр, объект, коллекция и т.д.).
-
attribute
sqlalchemy.orm.ColumnProperty.
mapper_property_to_assign¶
-
method
sqlalchemy.orm.ColumnProperty.
merge(session: Session, source_state: InstanceState[Any], source_dict: _InstanceDict, dest_state: InstanceState[Any], dest_dict: _InstanceDict, load: bool, _recursive: Dict[Any, object], _resolve_conflict_map: Dict[_IdentityKeyType[Any], object]) None ¶ Объединить атрибут, представленный этим
MapperProperty
, с объектом-источником и объектом-получателем.
- class sqlalchemy.orm.Composite¶
Декларативно-совместимый внешний интерфейс для класса
CompositeProperty
.Публичный конструктор - это функция
composite()
.Изменено в версии 2.0: Добавлен
Composite
как подклассCompositeProperty
, совместимый с Declarative.См.также
Классная подпись
класс
sqlalchemy.orm.Composite
(sqlalchemy.orm.descriptor_props.CompositeProperty
,sqlalchemy.orm.base._DeclarativeMapped
)
- class sqlalchemy.orm.CompositeProperty¶
Определяет «составной» сопоставленный атрибут, представляющий коллекцию столбцов как один атрибут.
CompositeProperty
строится с помощью функцииcomposite()
.См.также
Members
create_row_processor(), columns_to_assign, declarative_scan(), do_init(), get_history(), instrument_class(), mapper_property_to_assign
Классная подпись
class
sqlalchemy.orm.CompositeProperty
(sqlalchemy.orm._MapsColumns
,sqlalchemy.orm._IntrospectsAnnotations
,sqlalchemy.orm.descriptor_props.DescriptorProperty
)- class Comparator¶
Производить булевы, сравнительные и другие операторы для атрибутов
Composite
.Смотрите пример в Пересмотр операций сравнения для композитов для обзора использования, а также документацию для
PropComparator
.Классная подпись
класс
sqlalchemy.orm.CompositeProperty.Comparator
(sqlalchemy.orm.PropComparator
)
- class CompositeBundle¶
Классная подпись
класс
sqlalchemy.orm.CompositeProperty.CompositeBundle
(sqlalchemy.orm.Bundle
)-
method
sqlalchemy.orm.CompositeProperty.CompositeBundle.
create_row_processor(query: Select[Any], procs: Sequence[Callable[[Row[Any]], Any]], labels: Sequence[str]) Callable[[Row[Any]], Any] ¶ Произведите функцию «обработки строки» для данного
Bundle
.Может переопределяться подклассами для обеспечения пользовательского поведения при получении результатов. Во время выполнения запроса методу передается объект statement и набор функций «row processor»; эти функции при получении строки результата возвращают значение отдельного атрибута, которое затем может быть адаптировано в любую структуру возвращаемых данных.
Приведенный ниже пример иллюстрирует замену обычной структуры возврата
Row
на прямой словарь Python:from sqlalchemy.orm import Bundle class DictBundle(Bundle): def create_row_processor(self, query, procs, labels): 'Override create_row_processor to return values as dictionaries' def proc(row): return dict( zip(labels, (proc(row) for proc in procs)) ) return proc
Результат из приведенного выше
Bundle
вернет значения словаря:bn = DictBundle('mybundle', MyClass.data1, MyClass.data2) for row in session.execute(select(bn)).where(bn.c.data1 == 'd1'): print(row.mybundle['data1'], row.mybundle['data2'])
-
method
-
attribute
sqlalchemy.orm.CompositeProperty.
columns_to_assign¶
-
method
sqlalchemy.orm.CompositeProperty.
declarative_scan(decl_scan: _ClassScanMapperConfig, registry: _RegistryType, cls: Type[Any], originating_module: Optional[str], key: str, mapped_container: Optional[Type[Mapped[Any]]], annotation: Optional[_AnnotationScanType], extracted_mapped_annotation: Optional[_AnnotationScanType], is_dataclass_field: bool) None ¶ Выполняйте специфическую для класса инициализацию на ранних стадиях декларативного сканирования.
Добавлено в версии 2.0.
-
method
sqlalchemy.orm.CompositeProperty.
do_init() None ¶ Инициализация, которая происходит после того, как
Composite
был связан со своим родительским картографом.
-
method
sqlalchemy.orm.CompositeProperty.
get_history(state: InstanceState[Any], dict_: _InstanceDict, passive: PassiveFlag = symbol('PASSIVE_OFF')) History ¶ Предоставляется для пользовательского кода, который использует attributes.get_history().
-
method
sqlalchemy.orm.CompositeProperty.
instrument_class(mapper: Mapper[Any]) None ¶ Крючок, вызываемый маппером свойства для инициирования инструментации атрибута класса, управляемого этим MapperProperty.
Здесь MapperProperty обычно обращается к модулю атрибутов для установки InstrumentedAttribute.
Этот шаг является первым из двух шагов для установки InstrumentedAttribute, и вызывается в самом начале процесса настройки маппера.
Вторым шагом обычно является шаг init_class_attribute, вызываемый из StrategizedProperty через хук post_instrument_class(). Этот шаг назначает дополнительное состояние InstrumentedAttribute (в частности, «impl»), которое было определено после того, как MapperProperty определил, какой тип управления персистентностью ему нужно сделать (например, скаляр, объект, коллекция и т.д.).
-
attribute
sqlalchemy.orm.CompositeProperty.
mapper_property_to_assign¶
- class sqlalchemy.orm.AttributeEventToken¶
Жетон, распространяемый по всей цепочке событий атрибута.
Служит индикатором источника события, а также обеспечивает средство контроля распространения по цепочке операций с атрибутами.
Объект
Event
передается в качестве аргументаinitiator
при работе с такими событиями, какAttributeEvents.append()
,AttributeEvents.set()
иAttributeEvents.remove()
.Объект
Event
в настоящее время интерпретируется обработчиками событий backref и используется для управления распространением операций по двум взаимозависимым атрибутам.Изменено в версии 2.0: Изменил название с
AttributeEvent
наAttributeEventToken
.- атрибут impl:
AttributeImpl
, который является инициатором текущего события.- атрибут op:
Символ
OP_APPEND
,OP_REMOVE
,OP_REPLACE
илиOP_BULK_REPLACE
, указывающий на операцию источника.
- class sqlalchemy.orm.IdentityMap¶
Members
-
method
sqlalchemy.orm.IdentityMap.
check_modified() bool ¶ возвращает True, если все присутствующие InstanceStates были помечены как «измененные».
-
method
- class sqlalchemy.orm.InspectionAttr¶
Базовый класс, применяемый ко всем объектам и атрибутам ORM, которые связаны с вещами, которые могут быть возвращены функцией
inspect()
.Определенные здесь атрибуты позволяют использовать простые булевы проверки для проверки основных фактов о возвращаемом объекте.
Members
extension_type, is_aliased_class, is_attribute, is_bundle, is_clause_element, is_instance, is_mapper, is_property, is_selectable
Хотя проверка булевых значений здесь в основном такая же, как и при использовании функции Python isinstance(), флаги здесь можно использовать без необходимости импортировать все эти классы, а также таким образом, чтобы система классов SQLAlchemy могла меняться, оставляя флаги здесь нетронутыми для обеспечения совместимости.
-
attribute
sqlalchemy.orm.InspectionAttr.
extension_type: InspectionAttrExtensionType = 'not_extension'¶ Тип расширения, если таковой имеется. По умолчанию
NotExtension.NOT_EXTENSION
.
-
attribute
sqlalchemy.orm.InspectionAttr.
is_aliased_class = False¶ True, если этот объект является экземпляром
AliasedClass
.
-
attribute
sqlalchemy.orm.InspectionAttr.
is_attribute = False¶ True, если этот объект является Python descriptor.
Это может относиться к одному из многих типов. Обычно это
QueryableAttribute
, который обрабатывает события атрибутов от имениMapperProperty
. Но также может быть типом расширения, таким какAssociationProxy
илиhybrid_property
.InspectionAttr.extension_type
будет ссылаться на константу, идентифицирующую конкретный подтип.См.также
-
attribute
sqlalchemy.orm.InspectionAttr.
is_bundle = False¶ True, если этот объект является экземпляром
Bundle
.
-
attribute
sqlalchemy.orm.InspectionAttr.
is_clause_element = False¶ True, если этот объект является экземпляром
ClauseElement
.
-
attribute
sqlalchemy.orm.InspectionAttr.
is_instance = False¶ True, если этот объект является экземпляром
InstanceState
.
-
attribute
sqlalchemy.orm.InspectionAttr.
is_mapper = False¶ True, если этот объект является экземпляром
Mapper
.
-
attribute
sqlalchemy.orm.InspectionAttr.
is_property = False¶ True, если этот объект является экземпляром
MapperProperty
.
-
attribute
sqlalchemy.orm.InspectionAttr.
is_selectable = False¶ Возвращает True, если этот объект является экземпляром
Selectable
.
-
attribute
- class sqlalchemy.orm.InspectionAttrInfo¶
Добавляет атрибут
.info
кInspectionAttr
.Обоснование для
InspectionAttr
в сравнении сInspectionAttrInfo
заключается в том, что первый совместим как миксин для классов, которые определяют__slots__
; по сути, это артефакт реализации.Members
Классная подпись
класс
sqlalchemy.orm.InspectionAttrInfo
(sqlalchemy.orm.base.InspectionAttr
)-
attribute
sqlalchemy.orm.InspectionAttrInfo.
info¶ Информационный словарь, связанный с объектом, позволяющий связать пользовательские данные с этим
InspectionAttr
.Словарь создается при первом обращении к нему. В качестве альтернативы он может быть указан как аргумент конструктора функций
column_property()
,relationship()
илиcomposite()
.
-
attribute
- class sqlalchemy.orm.InstanceState¶
отслеживает информацию о состоянии на уровне экземпляра.
InstanceState
- это ключевой объект, используемый SQLAlchemy ORM для отслеживания состояния объекта; он создается в момент инстанцирования объекта, обычно в результате instrumentation, который SQLAlchemy применяет к методу__init__()
класса.InstanceState
также является полупубличным объектом, доступным для проверки состояния сопоставленного экземпляра во время выполнения, включая такую информацию, как его текущий статус в рамках конкретногоSession
и подробности о данных по отдельным атрибутам. Публичный API для получения объектаInstanceState
заключается в использовании системыinspect()
:>>> from sqlalchemy import inspect >>> insp = inspect(some_mapped_object) >>> insp.attrs.nickname.history History(added=['new nickname'], unchanged=(), deleted=['nickname'])
См.также
Members
async_session, attrs, callables, deleted, detached, dict, expired_attributes, has_identity, identity, identity_key, is_instance, mapper, object, pending, persistent, session, transient, unloaded, unloaded_expirable, unmodified, unmodified_intersection(), was_deleted
Классная подпись
класс
sqlalchemy.orm.InstanceState
(sqlalchemy.orm.base.InspectionAttrInfo
,typing.Generic
)-
attribute
sqlalchemy.orm.InstanceState.
async_session¶ Возвращает владельца
AsyncSession
для данного экземпляра, илиNone
, если таковых нет.Этот атрибут не является не-None, только если для данного объекта ORM используется API
sqlalchemy.ext.asyncio
. Возвращаемый объектAsyncSession
будет прокси для объектаSession
, который будет возвращен из атрибутаInstanceState.session
для данногоInstanceState
.Добавлено в версии 1.4.18.
См.также
-
attribute
sqlalchemy.orm.InstanceState.
attrs¶ Возвращает пространство имен, представляющее каждый атрибут сопоставленного объекта, включая его текущее значение и историю.
Возвращаемый объект является экземпляром
AttributeState
. Этот объект позволяет проверить текущие данные в атрибуте, а также историю атрибута с момента последней очистки.
-
attribute
sqlalchemy.orm.InstanceState.
callables: Dict[str, Callable[[InstanceState[_O], PassiveFlag], Any]] = {}¶ Пространство имен, с которым может быть связан вызываемый загрузчик для каждого состояния.
В SQLAlchemy 1.0 это используется только для ленивых загрузчиков / отложенных загрузчиков, которые были настроены через опцию запроса.
Ранее callables использовался также для указания истекших атрибутов путем хранения в этом словаре ссылки на сам InstanceState. Теперь эту роль выполняет набор expired_attributes.
-
attribute
sqlalchemy.orm.InstanceState.
deleted¶ Возвращает
True
, если объект является deleted.Объект, находящийся в удаленном состоянии, гарантированно не будет находиться в пределах
Session.identity_map
своего родителяSession
; однако если транзакция сессии будет откачена, объект будет восстановлен в постоянном состоянии и карте идентификации.Примечание
Атрибут
InstanceState.deleted
относится к определенному состоянию объекта, которое возникает между состояниями «persistent» и «detached»; как только объект становится detached, атрибутInstanceState.deleted
не возвращает True; чтобы определить, что состояние было удалено, независимо от того, связан ли объект сSession
, используйте аксессорInstanceState.was_deleted
.
-
attribute
sqlalchemy.orm.InstanceState.
detached¶ Возвращает
True
, если объект является detached.
-
attribute
sqlalchemy.orm.InstanceState.
dict¶ Возвращает дикту экземпляра, используемого объектом.
В обычных условиях это всегда синоним атрибута
__dict__
сопоставленного объекта, если только не настроена альтернативная система инструментов.В случае, если реальный объект был собран в мусор, этот аксессор возвращает пустой словарь.
-
attribute
sqlalchemy.orm.InstanceState.
expired_attributes: Set[str]¶ Набор ключей, которые «просрочены» для загрузки отложенным скалярным загрузчиком менеджера, при условии отсутствия ожидающих изменений.
см. также коллекцию
unmodified
, которая пересекается с этим набором, когда происходит операция обновления.
-
attribute
sqlalchemy.orm.InstanceState.
has_identity¶ Возвращает
True
, если у этого объекта есть ключ идентификации.Это значение всегда должно совпадать с выражением
state.persistent
илиstate.detached
.
-
attribute
sqlalchemy.orm.InstanceState.
identity¶ Возвращает сопоставленный идентификатор сопоставленного объекта. Это идентификатор первичного ключа, сохраненный ORM, который всегда может быть передан непосредственно в
Query.get()
.Возвращает
None
, если объект не имеет идентификатора первичного ключа.
-
attribute
sqlalchemy.orm.InstanceState.
identity_key¶ Возвращает идентификационный ключ для сопоставленного объекта.
Это ключ, используемый для нахождения объекта в связке
Session.identity_map
. Он содержит идентификатор, возвращаемыйidentity
внутри него.
-
attribute
sqlalchemy.orm.InstanceState.
is_instance: bool = True¶ True, если этот объект является экземпляром
InstanceState
.
-
attribute
sqlalchemy.orm.InstanceState.
mapper¶ Возвращает
Mapper
, используемый для данного сопоставленного объекта.
-
attribute
sqlalchemy.orm.InstanceState.
object¶ Возвращает отображенный объект, представленный данным
InstanceState
.Возвращает None, если объект был собран.
-
attribute
sqlalchemy.orm.InstanceState.
pending¶ Возвращает
True
, если объект является pending.
-
attribute
sqlalchemy.orm.InstanceState.
persistent¶ Возвращает
True
, если объект является persistent.Объект, находящийся в постоянном состоянии, гарантированно находится в пределах
Session.identity_map
своего родителяSession
.
-
attribute
sqlalchemy.orm.InstanceState.
session¶ Возвращает владельца
Session
для данного экземпляра, илиNone
, если таковых нет.Обратите внимание, что в некоторых случаях результат может быть отличным от результата
obj in session
; объект, который был удален, будет сообщать, что он неin session
, однако если транзакция все еще выполняется, этот атрибут все еще будет ссылаться на эту сессию. Только после завершения транзакции объект становится полностью отделенным при нормальных обстоятельствах.См.также
-
attribute
sqlalchemy.orm.InstanceState.
transient¶ Возвращает
True
, если объект является transient.
-
attribute
sqlalchemy.orm.InstanceState.
unloaded¶ Возвращает набор ключей, у которых нет загруженного значения.
Сюда входят атрибуты с истекшим сроком действия и любые другие атрибуты, которые никогда не были заполнены или изменены.
-
attribute
sqlalchemy.orm.InstanceState.
unloaded_expirable¶ Синоним
InstanceState.unloaded
.Не рекомендуется, начиная с версии 2.0: Атрибут
InstanceState.unloaded_expirable
является устаревшим. Пожалуйста, используйтеInstanceState.unloaded
.Этот атрибут был добавлен в качестве детали, специфичной для реализации, и должен рассматриваться как частный.
-
attribute
sqlalchemy.orm.InstanceState.
unmodified¶ Возвращает набор ключей, у которых нет незафиксированных изменений
-
method
sqlalchemy.orm.InstanceState.
unmodified_intersection(keys: Iterable[str]) Set[str] ¶ Возвращаем self.unmodified.intersection(keys).
-
attribute
sqlalchemy.orm.InstanceState.
was_deleted¶ Возвращает True, если этот объект находится или ранее находился в состоянии «deleted» и не был возвращен в состояние persistent.
Этот флаг возвращает значение True, если объект был удален в режиме flush. Когда объект будет удален из сессии явно или через фиксацию транзакции и перейдет в состояние «detached», этот флаг будет продолжать сообщать True.
-
attribute
- class sqlalchemy.orm.InstrumentedAttribute¶
Базовый класс для объектов descriptor, которые перехватывают события атрибутов от имени объекта
MapperProperty
. СобственноMapperProperty
доступен через атрибутQueryableAttribute.property
.Классная подпись
класс
sqlalchemy.orm.InstrumentedAttribute
(sqlalchemy.orm.QueryableAttribute
)
- class sqlalchemy.orm.LoaderCallableStatus¶
Перечисление.
Классная подпись
класс
sqlalchemy.orm.LoaderCallableStatus
(enum.Enum
)-
attribute
sqlalchemy.orm.LoaderCallableStatus.
ATTR_EMPTY = 3¶ Символ, используемый на внутреннем уровне для указания того, что атрибут не имеет возможности вызова.
-
attribute
sqlalchemy.orm.LoaderCallableStatus.
ATTR_WAS_SET = 2¶ Символ, возвращаемый вызываемой программой-загрузчиком, указывающий на то, что полученное значение или значения были присвоены своим атрибутам на целевом объекте.
-
attribute
sqlalchemy.orm.LoaderCallableStatus.
NEVER_SET = 4¶ Синоним NO_VALUE
Изменено в версии 1.4: NEVER_SET был объединен с NO_VALUE
-
attribute
sqlalchemy.orm.LoaderCallableStatus.
NO_VALUE = 4¶ Символ, который может быть помещен в качестве «предыдущего» значения атрибута, указывая на то, что при изменении атрибута не было загружено никакого значения, и флаги указывают на то, что мы не должны его загружать.
-
attribute
sqlalchemy.orm.LoaderCallableStatus.
PASSIVE_CLASS_MISMATCH = 1¶ Символ, указывающий на то, что объект локально присутствует для данного идентификатора первичного ключа, но он не относится к запрашиваемому классу. Поэтому возвращаемое значение - None, и никакого SQL не должно выдаваться.
-
attribute
sqlalchemy.orm.LoaderCallableStatus.
PASSIVE_NO_RESULT = 0¶ Символ, возвращаемый вызываемым загрузчиком или другой операцией извлечения атрибутов/истории, когда значение не может быть определено, основываясь на флагах вызываемого загрузчика.
-
attribute
- class sqlalchemy.orm.Mapped¶
Представляет сопоставленный атрибут ORM на сопоставленном классе.
Этот класс представляет собой полный интерфейс дескриптора для любого атрибута класса, который будет instrumented в классе ORM
Mapper
. Предоставляет соответствующую информацию программам проверки типов, таким как pylance и mypy, чтобы ORM-сопоставленные атрибуты были правильно типизированы.Наиболее заметное использование
Mapped
- в форме Declarative Mapping конфигурацииMapper
, где он используется в явном виде и управляет конфигурацией атрибутов ORM, таких какmapped_class()
иrelationship()
.Совет
Класс
Mapped
представляет атрибуты, которые обрабатываются непосредственно классомMapper
. Он не включает другие классы дескрипторов Python, предоставляемые в качестве расширений, включая Атрибуты гибрида и Доверенность Ассоциации. Хотя эти системы по-прежнему используют специфичные для ORM суперклассы и структуры, они не являются instrumented классамиMapper
и вместо этого предоставляют свою собственную функциональность при обращении к классу.Добавлено в версии 1.4.
Классная подпись
class
sqlalchemy.orm.Mapped
(sqlalchemy.orm.base.SQLORMExpression
,sqlalchemy.orm.base.ORMDescriptor
,sqlalchemy.orm.base._MappedAnnotationBase
,sqlalchemy.sql.roles.DDLConstraintColumnRole
)
- class sqlalchemy.orm.MappedColumn¶
Отображает один
Column
на класс.MappedColumn
является специализацией классаColumnProperty
и ориентирован на декларативную конфигурацию.Для создания объектов
MappedColumn
используйте функцию конструктораmapped_column()
.Добавлено в версии 2.0.
Классная подпись
class
sqlalchemy.orm.MappedColumn
(sqlalchemy.orm._IntrospectsAnnotations
,sqlalchemy.orm._MapsColumns
,sqlalchemy.orm.base._DeclarativeMapped
)
- class sqlalchemy.orm.MapperProperty¶
Представляют определенный атрибут класса, отображаемый с помощью
Mapper
.Наиболее распространенными встречами
MapperProperty
являются отображениеColumn
, которое представлено в отображении как экземплярColumnProperty
, и ссылка на другой класс, созданныйrelationship()
, представленный в отображении как экземплярRelationship
.Members
cascade_iterator(), class_attribute, comparator, create_row_processor(), do_init(), doc, info, init(), instrument_class(), is_property, key, merge(), parent, post_instrument_class(), set_parent(), setup()
Классная подпись
class
sqlalchemy.orm.MapperProperty
(sqlalchemy.sql.cache_key.HasCacheKey
,sqlalchemy.orm._DCAttributeOptions
,sqlalchemy.orm.base._MappedAttribute
,sqlalchemy.orm.base.InspectionAttrInfo
,sqlalchemy.util.langhelpers.MemoizedSlots
)-
method
sqlalchemy.orm.MapperProperty.
cascade_iterator(type_: str, state: InstanceState[Any], dict_: _InstanceDict, visited_states: Set[InstanceState[Any]], halt_on: Optional[Callable[[InstanceState[Any]], bool]] = None) Iterator[Tuple[object, Mapper[Any], InstanceState[Any], _InstanceDict]] ¶ Итерация по экземплярам, связанным с данным экземпляром для определенного «каскада», начиная с данного MapperProperty.
Возвращает итератор3-кортежей (экземпляр, картограф, состояние).
Обратите внимание, что коллекция „cascade“ на этом MapperProperty сначала проверяется на данный тип перед вызовом cascade_iterator.
Этот метод обычно применяется только к Отношениям.
-
attribute
sqlalchemy.orm.MapperProperty.
class_attribute¶ Возвращает связанный с классом дескриптор, соответствующий данному
MapperProperty
.По сути, это вызов
getattr()
:return getattr(self.parent.class_, self.key)
Т.е. если этот
MapperProperty
был названaddresses
, а класс, с которым он сопоставлен -User
, то возможна такая последовательность:>>> from sqlalchemy import inspect >>> mapper = inspect(User) >>> addresses_property = mapper.attrs.addresses >>> addresses_property.class_attribute is User.addresses True >>> User.addresses.property is addresses_property True
-
attribute
sqlalchemy.orm.MapperProperty.
comparator: PropComparator[_T]¶ Экземпляр
PropComparator
, который реализует построение SQL-выражения от имени этого сопоставленного атрибута.
-
method
sqlalchemy.orm.MapperProperty.
create_row_processor(context: ORMCompileState, query_entity: _MapperEntity, path: AbstractEntityRegistry, mapper: Mapper[Any], result: Result[Any], adapter: Optional[ORMAdapter], populators: _PopulatorDict) None ¶ Производить функции обработки строк и добавлять их к заданному набору списков популяторов.
-
method
sqlalchemy.orm.MapperProperty.
do_init() None ¶ Выполните шаги инициализации, специфичные для подклассов, после создания картографа.
Это шаблонный метод, вызываемый методом init() объекта
MapperProperty
.
-
attribute
sqlalchemy.orm.MapperProperty.
doc: Optional[str]¶ необязательная строка документации
-
attribute
sqlalchemy.orm.MapperProperty.
info: _InfoType¶ Информационный словарь, связанный с объектом, позволяющий связать пользовательские данные с этим
InspectionAttr
.Словарь создается при первом обращении к нему. В качестве альтернативы он может быть указан как аргумент конструктора функций
column_property()
,relationship()
илиcomposite()
.
-
method
sqlalchemy.orm.MapperProperty.
init() None ¶ Вызывается после создания всех картографов, чтобы собрать отношения между картографами и выполнить другие шаги инициализации после создания картографа.
-
method
sqlalchemy.orm.MapperProperty.
instrument_class(mapper: Mapper[Any]) None ¶ Крючок, вызываемый маппером свойства для инициирования инструментации атрибута класса, управляемого этим MapperProperty.
Здесь MapperProperty обычно обращается к модулю атрибутов для установки InstrumentedAttribute.
Этот шаг является первым из двух шагов для установки InstrumentedAttribute, и вызывается в самом начале процесса настройки маппера.
Вторым шагом обычно является шаг init_class_attribute, вызываемый из StrategizedProperty через хук post_instrument_class(). Этот шаг назначает дополнительное состояние InstrumentedAttribute (в частности, «impl»), которое было определено после того, как MapperProperty определил, какой тип управления персистентностью ему нужно сделать (например, скаляр, объект, коллекция и т.д.).
-
attribute
sqlalchemy.orm.MapperProperty.
is_property = True¶ Часть интерфейса InspectionAttr; указывает, что этот объект является свойством картографа.
-
attribute
sqlalchemy.orm.MapperProperty.
key: str¶ имя атрибута класса
-
method
sqlalchemy.orm.MapperProperty.
merge(session: Session, source_state: InstanceState[Any], source_dict: _InstanceDict, dest_state: InstanceState[Any], dest_dict: _InstanceDict, load: bool, _recursive: Dict[Any, object], _resolve_conflict_map: Dict[_IdentityKeyType[Any], object]) None ¶ Объединить атрибут, представленный этим
MapperProperty
, с объектом-источником и объектом-получателем.
-
attribute
sqlalchemy.orm.MapperProperty.
parent: Mapper[Any]¶ Mapper
, управляющий этим свойством.
-
method
sqlalchemy.orm.MapperProperty.
post_instrument_class(mapper: Mapper[Any]) None ¶ Выполните настройки инструментария, которые необходимо выполнить после завершения init().
Данный Mapper - это Mapper, вызывающий операцию, который может быть не тем же Mapper, что и self.parent в сценарии наследования; однако, Mapper всегда будет, по крайней мере, подмаппером self.parent.
Этот метод обычно используется StrategizedProperty, который делегирует его LoaderStrategy.init_class_attribute() для выполнения окончательной настройки связанного с классом InstrumentedAttribute.
-
method
sqlalchemy.orm.MapperProperty.
set_parent(parent: Mapper[Any], init: bool) None ¶ Установите родительский маппер, который ссылается на этот MapperProperty.
Этот метод переопределяется некоторыми подклассами для выполнения дополнительной настройки при первом знакомстве с картографом.
-
method
sqlalchemy.orm.MapperProperty.
setup(context: ORMCompileState, query_entity: _MapperEntity, path: AbstractEntityRegistry, adapter: Optional[ORMAdapter], **kwargs: Any) None ¶ Вызывается Query для построения SQL-оператора.
Каждый MapperProperty, связанный с целевым маппером, обрабатывает утверждение, на которое ссылается контекст запроса, добавляя столбцы и/или критерий по мере необходимости.
-
method
- class sqlalchemy.orm.MappedSQLExpression¶
Декларативный внешний интерфейс для класса
ColumnProperty
.Публичный конструктор - это функция
column_property()
.Изменено в версии 2.0: Добавлен
MappedSQLExpression
в качестве подкласса, совместимого с декларативным методом, дляColumnProperty
.См.также
Классная подпись
класс
sqlalchemy.orm.MappedSQLExpression
(sqlalchemy.orm.properties.ColumnProperty
,sqlalchemy.orm.base._DeclarativeMapped
)
- class sqlalchemy.orm.InspectionAttrExtensionType¶
Символы, указывающие на тип расширения, частью которого является
InspectionAttr
.Классная подпись
класс
sqlalchemy.orm.InspectionAttrExtensionType
(enum.Enum
)
- class sqlalchemy.orm.NotExtension¶
Перечисление.
Members
Классная подпись
класс
sqlalchemy.orm.NotExtension
(sqlalchemy.orm.base.InspectionAttrExtensionType
)-
attribute
sqlalchemy.orm.NotExtension.
NOT_EXTENSION = 'not_extension'¶ Символ, указывающий на
InspectionAttr
, который не является частью sqlalchemy.ext.Присваивается атрибуту
InspectionAttr.extension_type
.
-
attribute
- function sqlalchemy.orm.merge_result(query: Query[Any], iterator: Union[FrozenResult, Iterable[Sequence[Any]], Iterable[object]], load: bool = True) Union[FrozenResult, Iterable[Any]] ¶
Объединить результат в сессию данного объекта
Query
.Не рекомендуется, начиная с версии 2.0: Функция
merge_result()
считается унаследованной от серии 1.x SQLAlchemy и становится унаследованной конструкцией в версии 2.0. Функция, как и метод наQuery
, вытесняется функциейmerge_frozen_result()
. (Справочная информация по SQLAlchemy 2.0 в: SQLAlchemy 2.0 - руководство по миграции)Документацию верхнего уровня по этой функции смотрите в
Query.merge_result()
.
- function sqlalchemy.orm.merge_frozen_result(session, statement, frozen_result, load=True)¶
Объединить
FrozenResult
обратно вSession
, возвращая новый объектResult
с объектами persistent.Пример см. в разделе Повторное выполнение заявлений.
- class sqlalchemy.orm.PropComparator¶
Определяет операции SQL для сопоставленных атрибутов ORM.
SQLAlchemy позволяет переопределять операторы как на уровне Core, так и на уровне ORM.
PropComparator
является базовым классом переопределения операторов для операций уровня ORM, включая операцииColumnProperty
,Relationship
иComposite
.Можно создавать определяемые пользователем подклассы
PropComparator
. Встроенные методы операторов сравнения и математических операторов Python, такие какColumnOperators.__eq__()
,ColumnOperators.__lt__()
иColumnOperators.__add__()
, могут быть переопределены для обеспечения нового поведения оператора. ПользовательскийPropComparator
передается экземпляруMapperProperty
через аргументcomparator_factory
. В каждом случае следует использовать соответствующий подклассPropComparator
:# definition of custom PropComparator subclasses from sqlalchemy.orm.properties import \ ColumnProperty,\ Composite,\ Relationship class MyColumnComparator(ColumnProperty.Comparator): def __eq__(self, other): return self.__clause_element__() == other class MyRelationshipComparator(Relationship.Comparator): def any(self, expression): "define the 'any' operation" # ... class MyCompositeComparator(Composite.Comparator): def __gt__(self, other): "redefine the 'greater than' operation" return sql.and_(*[a>b for a, b in zip(self.__clause_element__().clauses, other.__composite_values__())]) # application of custom PropComparator subclasses from sqlalchemy.orm import column_property, relationship, composite from sqlalchemy import Column, String class SomeMappedClass(Base): some_column = column_property(Column("some_column", String), comparator_factory=MyColumnComparator) some_relationship = relationship(SomeOtherClass, comparator_factory=MyRelationshipComparator) some_composite = composite( Column("a", String), Column("b", String), comparator_factory=MyCompositeComparator )
Обратите внимание, что для переопределения операторов на уровне столбцов обычно проще определить операторы на уровне ядра, используя атрибут
TypeEngine.comparator_factory
. См. раздел Переопределение и создание новых операторов для более подробной информации.Members
__eq__(), __le__(), __lt__(), __ne__(), adapt_to_entity(), adapter, all_(), and_(), any(), any_(), asc(), 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(), match(), not_ilike(), not_in(), not_like(), notilike(), notin_(), notlike(), nulls_first(), nulls_last(), nullsfirst(), nullslast(), of_type(), op(), operate(), property, regexp_match(), regexp_replace(), reverse_operate(), startswith(), timetuple
Классная подпись
class
sqlalchemy.orm.PropComparator
(sqlalchemy.orm.base.SQLORMOperations
,typing.Generic
,sqlalchemy.sql.expression.ColumnOperators
)-
method
sqlalchemy.orm.PropComparator.
__eq__(other: Any) ColumnOperators ¶ наследуется от
sqlalchemy.sql.expression.ColumnOperators.__eq__
методаColumnOperators
Реализуйте оператор
==
.В контексте столбца выдает предложение
a = b
. Если цельNone
, выдаетa IS NULL
.
-
method
sqlalchemy.orm.PropComparator.
__le__(other: Any) ColumnOperators ¶ наследуется от
sqlalchemy.sql.expression.ColumnOperators.__le__
методаColumnOperators
Реализуйте оператор
<=
.В контексте столбца производит предложение
a <= b
.
-
method
sqlalchemy.orm.PropComparator.
__lt__(other: Any) ColumnOperators ¶ наследуется от
sqlalchemy.sql.expression.ColumnOperators.__lt__
методаColumnOperators
Реализуйте оператор
<
.В контексте столбца производит предложение
a < b
.
-
method
sqlalchemy.orm.PropComparator.
__ne__(other: Any) ColumnOperators ¶ наследуется от
sqlalchemy.sql.expression.ColumnOperators.__ne__
методаColumnOperators
Реализуйте оператор
!=
.В контексте столбца выдает предложение
a != b
. Если цельNone
, выдаетa IS NOT NULL
.
-
method
sqlalchemy.orm.PropComparator.
adapt_to_entity(adapt_to_entity: AliasedInsp[Any]) PropComparator[_T] ¶ Возвращает копию этого PropComparator, который будет использовать заданные
AliasedInsp
для получения соответствующих выражений.
-
attribute
sqlalchemy.orm.PropComparator.
adapter¶ Создайте вызываемую программу, которая адаптирует выражения столбцов к псевдослучайной версии этого компаратора.
-
method
sqlalchemy.orm.PropComparator.
all_() ColumnOperators ¶ наследуется от
ColumnOperators.all_()
методаColumnOperators
Произведите предложение
all_()
против родительского объекта.Примеры см. в документации для
all_()
.Примечание
не путайте более новый метод
ColumnOperators.all_()
с его более старым аналогомARRAY
, специфическим методомComparator.all()
, который имеет другой синтаксис вызова и схему использования.
-
method
sqlalchemy.orm.PropComparator.
and_(*criteria: _ColumnExpressionArgument[bool]) PropComparator[bool] ¶ Добавьте дополнительные критерии к предложению ON, которое представлено этим атрибутом отношения.
Например:
stmt = select(User).join( User.addresses.and_(Address.email_address != 'foo') ) stmt = select(User).options( joinedload(User.addresses.and_(Address.email_address != 'foo')) )
Добавлено в версии 1.4.
-
method
sqlalchemy.orm.PropComparator.
any(criterion: Optional[_ColumnExpressionArgument[bool]] = None, **kwargs: Any) ColumnElement[bool] ¶ Возвращает SQL-выражение, представляющее true, если этот элемент ссылается на член, удовлетворяющий заданному критерию.
Обычная реализация
any()
- этоComparator.any()
.- Параметры:
criterion – необязательный ClauseElement, сформулированный относительно таблицы или атрибутов класса-члена.
**kwargs – пары ключ/значение, соответствующие именам атрибутов класса-члена, которые будут сравниваться через равенство с соответствующими значениями.
-
method
sqlalchemy.orm.PropComparator.
any_() ColumnOperators ¶ наследуется от
ColumnOperators.any_()
методаColumnOperators
Произведите предложение
any_()
против родительского объекта.Примеры см. в документации для
any_()
.Примечание
не путайте более новый метод
ColumnOperators.any_()
с его более старым аналогомARRAY
, специфическим методомComparator.any()
, который имеет другой синтаксис вызова и схему использования.
-
method
sqlalchemy.orm.PropComparator.
asc() ColumnOperators ¶ наследуется от
ColumnOperators.asc()
методаColumnOperators
Произведите предложение
asc()
против родительского объекта.
-
method
sqlalchemy.orm.PropComparator.
between(cleft: Any, cright: Any, symmetric: bool = False) ColumnOperators ¶ наследуется от
ColumnOperators.between()
методаColumnOperators
Произведите предложение
between()
против родительского объекта, задав нижний и верхний диапазон.
-
method
sqlalchemy.orm.PropComparator.
bitwise_and(other: Any) ColumnOperators ¶ наследуется от
ColumnOperators.bitwise_and()
методаColumnOperators
Произвести побитовую операцию AND, обычно с помощью оператора
&
.Добавлено в версии 2.0.2.
См.также
-
method
sqlalchemy.orm.PropComparator.
bitwise_lshift(other: Any) ColumnOperators ¶ наследуется от
ColumnOperators.bitwise_lshift()
методаColumnOperators
Произвести побитовую операцию LSHIFT, обычно с помощью оператора
<<
.Добавлено в версии 2.0.2.
См.также
-
method
sqlalchemy.orm.PropComparator.
bitwise_not() ColumnOperators ¶ наследуется от
ColumnOperators.bitwise_not()
методаColumnOperators
Произвести побитовую операцию NOT, обычно с помощью оператора
~
.Добавлено в версии 2.0.2.
См.также
-
method
sqlalchemy.orm.PropComparator.
bitwise_or(other: Any) ColumnOperators ¶ наследуется от
ColumnOperators.bitwise_or()
методаColumnOperators
Произвести операцию побитового ИЛИ, обычно с помощью оператора
|
.Добавлено в версии 2.0.2.
См.также
-
method
sqlalchemy.orm.PropComparator.
bitwise_rshift(other: Any) ColumnOperators ¶ наследуется от
ColumnOperators.bitwise_rshift()
методаColumnOperators
Произвести побитовую операцию RSHIFT, обычно с помощью оператора
>>
.Добавлено в версии 2.0.2.
См.также
-
method
sqlalchemy.orm.PropComparator.
bitwise_xor(other: Any) ColumnOperators ¶ наследуется от
ColumnOperators.bitwise_xor()
методаColumnOperators
Произвести побитовую операцию XOR, обычно с помощью оператора
^
или#
для PostgreSQL.Добавлено в версии 2.0.2.
См.также
-
method
sqlalchemy.orm.PropComparator.
bool_op(opstring: str, precedence: int = 0, python_impl: Optional[Callable[[...], Any]] = None) Callable[[Any], Operators] ¶ наследуется от
Operators.bool_op()
методаOperators
Возвращает пользовательский булев оператор.
Этот метод является сокращением для вызова
Operators.op()
и передачи флагаOperators.op.is_comparison
со значением True. Ключевым преимуществом использованияOperators.bool_op()
является то, что при использовании конструкций столбцов «булева» природа возвращаемого выражения будет присутствовать для целей PEP 484.См.также
-
method
sqlalchemy.orm.PropComparator.
collate(collation: str) ColumnOperators ¶ наследуется от
ColumnOperators.collate()
методаColumnOperators
Производит предложение
collate()
против родительского объекта, учитывая строку collation.См.также
-
method
sqlalchemy.orm.PropComparator.
concat(other: Any) ColumnOperators ¶ наследуется от
ColumnOperators.concat()
методаColumnOperators
Реализуйте оператор „concat“.
В контексте столбца производит предложение
a || b
, или использует операторconcat()
в MySQL.
-
method
sqlalchemy.orm.PropComparator.
contains(other: Any, **kw: Any) ColumnOperators ¶ наследуется от
ColumnOperators.contains()
методаColumnOperators
Реализуйте оператор „contains“.
Вырабатывает выражение LIKE, которое проверяет совпадение с серединой строкового значения:
column LIKE '%' || <other> || '%'
Например:
stmt = select(sometable).\ where(sometable.c.column.contains("foobar"))
Поскольку оператор использует
LIKE
, символы подстановки"%"
и"_"
, присутствующие внутри выражения <other>, также будут вести себя как символы подстановки. Для буквальных строковых значений флагColumnOperators.contains.autoescape
может быть установлен в значениеTrue
, чтобы применить экранирование к вхождениям этих символов в строковое значение так, чтобы они совпадали сами по себе, а не как символы подстановки. В качестве альтернативы, параметрColumnOperators.contains.escape
устанавливает данный символ как символ экранирования, что может быть полезно, когда целевое выражение не является литеральной строкой.- Параметры:
other – выражение для сравнения. Обычно это обычное строковое значение, но может быть и произвольным выражением SQL. Символы подстановки LIKE
%
и_
по умолчанию не экранируются, если только флагColumnOperators.contains.autoescape
не установлен в True.autoescape – boolean; при значении True устанавливает символ экранирования в выражении LIKE, затем применяет его ко всем вхождениям
"%"
,"_"
и самого символа экранирования в значении сравнения, которое считается литеральной строкой, а не выражением SQL. Выражение типа:: somecolumn.contains(«foo%bar», autoescape=True) будет выглядеть так:: somecolumn LIKE „%“ || :param || „%“ ESCAPE „/“ Со значением:param
как"foo/%bar"
.escape – символ, который при передаче будет отображаться с ключевым словом
ESCAPE
, чтобы установить этот символ в качестве управляющего символа. Затем этот символ может быть помещен перед вхождениями%
и_
, чтобы позволить им действовать как самим себе, а не как символам подстановки. Выражение типа:: somecolumn.contains(«foo/%bar», escape=»^») будет выглядеть так:: somecolumn LIKE „%“ || :param || „%“ ESCAPE „^“ Параметр также может быть объединен сColumnOperators.contains.autoescape
:: somecolumn.contains(«foo%bar^bat», escape=»^», autoescape=True) Где выше, заданный литеральный параметр будет преобразован в"foo^%bar^^bat"
перед передачей в базу данных.
-
method
sqlalchemy.orm.PropComparator.
desc() ColumnOperators ¶ наследуется от
ColumnOperators.desc()
методаColumnOperators
Произведите предложение
desc()
против родительского объекта.
-
method
sqlalchemy.orm.PropComparator.
distinct() ColumnOperators ¶ наследуется от
ColumnOperators.distinct()
методаColumnOperators
Произведите предложение
distinct()
против родительского объекта.
-
method
sqlalchemy.orm.PropComparator.
endswith(other: Any, escape: Optional[str] = None, autoescape: bool = False) ColumnOperators ¶ наследуется от
ColumnOperators.endswith()
методаColumnOperators
Реализуйте оператор „endswith“.
Создает выражение LIKE, которое проверяет совпадение с концом строкового значения:
column LIKE '%' || <other>
Например:
stmt = select(sometable).\ where(sometable.c.column.endswith("foobar"))
Поскольку оператор использует
LIKE
, символы подстановки"%"
и"_"
, присутствующие внутри выражения <other>, также будут вести себя как символы подстановки. Для буквальных строковых значений флагColumnOperators.endswith.autoescape
может быть установлен в значениеTrue
, чтобы применить экранирование к вхождениям этих символов в строковое значение так, чтобы они совпадали сами по себе, а не как символы подстановки. В качестве альтернативы, параметрColumnOperators.endswith.escape
устанавливает данный символ как символ экранирования, что может быть полезно, когда целевое выражение не является литеральной строкой.- Параметры:
other – выражение для сравнения. Обычно это обычное строковое значение, но может быть и произвольным выражением SQL. Символы подстановки LIKE
%
и_
по умолчанию не экранируются, если только флагColumnOperators.endswith.autoescape
не установлен в True.autoescape – boolean; когда True, устанавливает символ экранирования в выражении LIKE, затем применяет его ко всем вхождениям
"%"
,"_"
и самого символа экранирования в значении сравнения, которое предполагается как литеральная строка, а не выражение SQL. Выражение типа:: somecolumn.endswith(«foo%bar», autoescape=True) будет выглядеть так:: somecolumn LIKE „%“ || :param ESCAPE „/“ Со значением:param
как"foo/%bar"
.escape – символ, который при передаче будет отображаться с ключевым словом
ESCAPE
, чтобы установить этот символ в качестве управляющего символа. Затем этот символ может быть помещен перед вхождениями%
и_
, чтобы позволить им действовать как самим себе, а не как символам подстановки. Выражение типа:: somecolumn.endswith(«foo/%bar», escape=»^») будет выглядеть так:: somecolumn LIKE „%“ || :param ESCAPE „^“ Параметр также может быть объединен сColumnOperators.endswith.autoescape
:: somecolumn.endswith(«foo%bar^bat», escape=»^», autoescape=True) Где выше, данный литеральный параметр будет преобразован в"foo^%bar^^bat"
перед передачей в базу данных.
-
method
sqlalchemy.orm.PropComparator.
has(criterion: Optional[_ColumnExpressionArgument[bool]] = None, **kwargs: Any) ColumnElement[bool] ¶ Возвращает SQL-выражение, представляющее true, если этот элемент ссылается на член, удовлетворяющий заданному критерию.
Обычная реализация
has()
- этоComparator.has()
.- Параметры:
criterion – необязательный ClauseElement, сформулированный относительно таблицы или атрибутов класса-члена.
**kwargs – пары ключ/значение, соответствующие именам атрибутов класса-члена, которые будут сравниваться через равенство с соответствующими значениями.
-
method
sqlalchemy.orm.PropComparator.
icontains(other: Any, **kw: Any) ColumnOperators ¶ наследуется от
ColumnOperators.icontains()
методаColumnOperators
Реализуйте оператор
icontains
, например, нечувствительную к регистру версиюColumnOperators.contains()
.Создает выражение LIKE, которое проверяет нечувствительное соответствие для середины строкового значения:
lower(column) LIKE '%' || lower(<other>) || '%'
Например:
stmt = select(sometable).\ where(sometable.c.column.icontains("foobar"))
Поскольку оператор использует
LIKE
, символы подстановки"%"
и"_"
, присутствующие внутри выражения <other>, также будут вести себя как символы подстановки. Для буквальных строковых значений флагColumnOperators.icontains.autoescape
может быть установлен в значениеTrue
, чтобы применить экранирование к вхождениям этих символов в строковое значение так, чтобы они совпадали сами по себе, а не как символы подстановки. В качестве альтернативы, параметрColumnOperators.icontains.escape
устанавливает данный символ как символ экранирования, что может быть полезно, когда целевое выражение не является литеральной строкой.- Параметры:
other – выражение для сравнения. Обычно это обычное строковое значение, но может быть и произвольным выражением SQL. Символы подстановки LIKE
%
и_
по умолчанию не экранируются, если только флагColumnOperators.icontains.autoescape
не установлен в True.autoescape – boolean; при значении True устанавливает символ экранирования в выражении LIKE, затем применяет его ко всем вхождениям
"%"
,"_"
и самого символа экранирования в значении сравнения, которое предполагается как литеральная строка, а не выражение SQL. Выражение типа:: somecolumn.icontains(«foo%bar», autoescape=True) будет выглядеть так:: lower(somecolumn) LIKE „%“ || lower(:param) || „%“ ESCAPE „/“ Со значением:param
как"foo/%bar"
.escape – символ, который при передаче будет отображаться с ключевым словом
ESCAPE
, чтобы установить этот символ в качестве управляющего символа. Затем этот символ может быть помещен перед вхождениями%
и_
, чтобы позволить им действовать как самим себе, а не как символам подстановки. Выражение типа:: somecolumn.icontains(«foo/%bar», escape=»^») будет выглядеть так:: lower(somecolumn) LIKE „%“ || lower(:param) || „%“ ESCAPE „^“ Параметр также может быть объединен сColumnOperators.contains.autoescape
:: somecolumn.icontains(«foo%bar^bat», escape=»^», autoescape=True) Где выше, заданный литеральный параметр будет преобразован в"foo^%bar^^bat"
перед передачей в базу данных.
См.также
-
method
sqlalchemy.orm.PropComparator.
iendswith(other: Any, escape: Optional[str] = None, autoescape: bool = False) ColumnOperators ¶ наследуется от
ColumnOperators.iendswith()
методаColumnOperators
Реализуйте оператор
iendswith
, например, нечувствительную к регистру версиюColumnOperators.endswith()
.Создает выражение LIKE, которое проверяет нечувствительное совпадение конца строкового значения:
lower(column) LIKE '%' || lower(<other>)
Например:
stmt = select(sometable).\ where(sometable.c.column.iendswith("foobar"))
Поскольку оператор использует
LIKE
, символы подстановки"%"
и"_"
, присутствующие внутри выражения <other>, также будут вести себя как символы подстановки. Для буквальных строковых значений флагColumnOperators.iendswith.autoescape
может быть установлен в значениеTrue
, чтобы применить экранирование к вхождениям этих символов в строковое значение так, чтобы они совпадали сами по себе, а не как символы подстановки. В качестве альтернативы, параметрColumnOperators.iendswith.escape
устанавливает данный символ как символ экранирования, что может быть полезно, когда целевое выражение не является литеральной строкой.- Параметры:
other – выражение для сравнения. Обычно это обычное строковое значение, но может быть и произвольным выражением SQL. Символы подстановки LIKE
%
и_
по умолчанию не экранируются, если только флагColumnOperators.iendswith.autoescape
не установлен в True.autoescape – boolean; при значении True устанавливает символ экранирования в выражении LIKE, затем применяет его ко всем вхождениям
"%"
,"_"
и самого символа экранирования в значении сравнения, которое предполагается как литеральная строка, а не как выражение SQL. Выражение типа:: somecolumn.iendswith(«foo%bar», autoescape=True) будет выглядеть так:: lower(somecolumn) LIKE „%“ || lower(:param) ESCAPE „/“ Со значением:param
как"foo/%bar"
.escape – символ, который при передаче будет отображаться с ключевым словом
ESCAPE
, чтобы установить этот символ в качестве управляющего символа. Затем этот символ может быть помещен перед вхождениями%
и_
, чтобы позволить им действовать как самим себе, а не как символам подстановки. Выражение типа:: somecolumn.iendswith(«foo/%bar», escape=»^») будет выглядеть так:: lower(somecolumn) LIKE „%“ || lower(:param) ESCAPE „^“ Параметр также может быть объединен сColumnOperators.iendswith.autoescape
:: somecolumn.endswith(«foo%bar^bat», escape=»^», autoescape=True) Где выше, заданный литеральный параметр будет преобразован в"foo^%bar^^bat"
перед передачей в базу данных.
См.также
-
method
sqlalchemy.orm.PropComparator.
ilike(other: Any, escape: Optional[str] = None) ColumnOperators ¶ наследуется от
ColumnOperators.ilike()
методаColumnOperators
Реализуйте оператор
ilike
, например, нечувствительный к регистру LIKE.В контексте столбца выдает выражение либо в форме:
lower(a) LIKE lower(other)
Или на бэкендах, поддерживающих оператор ILIKE:
a ILIKE other
Например:
stmt = select(sometable).\ where(sometable.c.column.ilike("%foobar%"))
- Параметры:
other – сравниваемое выражение
escape – необязательный управляющий символ, отображает ключевое слово
ESCAPE
, например:: somecolumn.ilike(«foo/%bar», escape=»/»)
См.также
-
method
sqlalchemy.orm.PropComparator.
in_(other: Any) ColumnOperators ¶ наследуется от
ColumnOperators.in_()
методаColumnOperators
Реализуйте оператор
in
.В контексте столбца производит предложение
column IN <other>
.Заданный параметр
other
может быть:Список литеральных значений, например:
stmt.where(column.in_([1, 2, 3]))
В этой форме вызова список элементов преобразуется в набор связанных параметров той же длины, что и данный список:
WHERE COL IN (?, ?, ?)
Список кортежей может быть предоставлен, если сравнение производится с
tuple_()
, содержащим несколько выражений:from sqlalchemy import tuple_ stmt.where(tuple_(col1, col2).in_([(1, 10), (2, 20), (3, 30)]))
Пустой список, например:
stmt.where(column.in_([]))
В этой вызывающей форме выражение выдает выражение «пустой набор». Эти выражения адаптированы для отдельных бэкендов и обычно пытаются получить пустой оператор SELECT в качестве подзапроса. Например, на SQLite это выражение выглядит так:
WHERE col IN (SELECT 1 FROM (SELECT 1) WHERE 1!=1)
Изменено в версии 1.4: пустые выражения IN теперь во всех случаях используют сгенерированный во время выполнения подзапрос SELECT.
Связанный параметр, например
bindparam()
, может быть использован, если он включает флагbindparam.expanding
:stmt.where(column.in_(bindparam('value', expanding=True)))
В этой форме вызова выражение отображает специальное не-SQL выражение-заполнитель, которое выглядит так:
WHERE COL IN ([EXPANDING_value])
Это выражение-заполнитель перехватывается во время выполнения оператора и преобразуется в форму переменной номера связанного параметра, показанную ранее. Если бы оператор был выполнен как:
connection.execute(stmt, {"value": [1, 2, 3]})
Базе данных будет передан связанный параметр для каждого значения:
WHERE COL IN (?, ?, ?)
Добавлено в версии 1.2: добавлены «расширяющие» связанные параметры
Если передан пустой список, то будет выведено специальное выражение «пустой список», специфичное для используемой базы данных. Для SQLite это будет:
WHERE COL IN (SELECT 1 FROM (SELECT 1) WHERE 1!=1)
Добавлено в версии 1.3: «Расширяющиеся» связанные параметры теперь поддерживают пустые списки
конструкция
select()
, которая обычно является коррелированным скаляром select:stmt.where( column.in_( select(othertable.c.y). where(table.c.x == othertable.c.x) ) )
В этой вызывающей форме
ColumnOperators.in_()
отображается так:WHERE COL IN (SELECT othertable.y FROM othertable WHERE othertable.x = table.x)
- Параметры:
other – список литералов, конструкция
select()
или конструкцияbindparam()
, в которой флагbindparam.expanding
установлен в True.
-
method
sqlalchemy.orm.PropComparator.
is_(other: Any) ColumnOperators ¶ наследуется от
ColumnOperators.is_()
методаColumnOperators
Реализуйте оператор
IS
.Обычно
IS
генерируется автоматически при сравнении со значениемNone
, которое разрешается вNULL
. Однако, явное использованиеIS
может быть желательным при сравнении с булевыми значениями на некоторых платформах.См.также
-
method
sqlalchemy.orm.PropComparator.
is_distinct_from(other: Any) ColumnOperators ¶ наследуется от
ColumnOperators.is_distinct_from()
методаColumnOperators
Реализуйте оператор
IS DISTINCT FROM
.Выводит «a IS DISTINCT FROM b» на большинстве платформ; на некоторых, таких как SQLite, может выводить «a IS NOT b».
-
method
sqlalchemy.orm.PropComparator.
is_not(other: Any) ColumnOperators ¶ наследуется от
ColumnOperators.is_not()
методаColumnOperators
Реализуйте оператор
IS NOT
.Обычно
IS NOT
генерируется автоматически при сравнении со значениемNone
, которое разрешается вNULL
. Однако, явное использованиеIS NOT
может быть желательным при сравнении с булевыми значениями на некоторых платформах.Изменено в версии 1.4: Оператор
is_not()
переименован изisnot()
в предыдущих выпусках. Предыдущее название остается доступным для обратной совместимости.См.также
-
method
sqlalchemy.orm.PropComparator.
is_not_distinct_from(other: Any) ColumnOperators ¶ наследуется от
ColumnOperators.is_not_distinct_from()
методаColumnOperators
Реализуйте оператор
IS NOT DISTINCT FROM
.Выводит «a IS NOT DISTINCT FROM b» на большинстве платформ; на некоторых, таких как SQLite, может выводить «a IS b».
Изменено в версии 1.4: Оператор
is_not_distinct_from()
переименован изisnot_distinct_from()
в предыдущих выпусках. Предыдущее название остается доступным для обратной совместимости.
-
method
sqlalchemy.orm.PropComparator.
isnot(other: Any) ColumnOperators ¶ наследуется от
ColumnOperators.isnot()
методаColumnOperators
Реализуйте оператор
IS NOT
.Обычно
IS NOT
генерируется автоматически при сравнении со значениемNone
, которое разрешается вNULL
. Однако, явное использованиеIS NOT
может быть желательным при сравнении с булевыми значениями на некоторых платформах.Изменено в версии 1.4: Оператор
is_not()
переименован изisnot()
в предыдущих выпусках. Предыдущее название остается доступным для обратной совместимости.См.также
-
method
sqlalchemy.orm.PropComparator.
isnot_distinct_from(other: Any) ColumnOperators ¶ наследуется от
ColumnOperators.isnot_distinct_from()
методаColumnOperators
Реализуйте оператор
IS NOT DISTINCT FROM
.Выводит «a IS NOT DISTINCT FROM b» на большинстве платформ; на некоторых, таких как SQLite, может выводить «a IS b».
Изменено в версии 1.4: Оператор
is_not_distinct_from()
переименован изisnot_distinct_from()
в предыдущих выпусках. Предыдущее название остается доступным для обратной совместимости.
-
method
sqlalchemy.orm.PropComparator.
istartswith(other: Any, escape: Optional[str] = None, autoescape: bool = False) ColumnOperators ¶ наследуется от
ColumnOperators.istartswith()
методаColumnOperators
Реализуйте оператор
istartswith
, например, нечувствительную к регистру версиюColumnOperators.startswith()
.Создает выражение LIKE, которое проверяет нечувствительное совпадение начала строкового значения:
lower(column) LIKE lower(<other>) || '%'
Например:
stmt = select(sometable).\ where(sometable.c.column.istartswith("foobar"))
Поскольку оператор использует
LIKE
, символы подстановки"%"
и"_"
, присутствующие внутри выражения <other>, также будут вести себя как символы подстановки. Для буквальных строковых значений флагColumnOperators.istartswith.autoescape
может быть установлен в значениеTrue
, чтобы применить экранирование к вхождениям этих символов в строковое значение так, чтобы они совпадали сами по себе, а не как символы подстановки. В качестве альтернативы, параметрColumnOperators.istartswith.escape
устанавливает данный символ как символ экранирования, что может быть полезно, когда целевое выражение не является литеральной строкой.- Параметры:
other – выражение для сравнения. Обычно это обычное строковое значение, но может быть и произвольным выражением SQL. Символы подстановки LIKE
%
и_
по умолчанию не экранируются, если только флагColumnOperators.istartswith.autoescape
не установлен в True.autoescape – boolean; при значении True устанавливает символ экранирования в выражении LIKE, затем применяет его ко всем вхождениям
"%"
,"_"
и самого символа экранирования в значении сравнения, которое предполагается как литеральная строка, а не выражение SQL. Выражение типа:: somecolumn.istartswith(«foo%bar», autoescape=True) будет выглядеть так:: lower(somecolumn) LIKE lower(:param) || „%“ ESCAPE „/“ Со значением:param
как"foo/%bar"
.escape – символ, который при передаче будет отображаться с ключевым словом
ESCAPE
, чтобы установить этот символ в качестве управляющего символа. Затем этот символ может быть помещен перед вхождениями%
и_
, чтобы позволить им действовать как самим себе, а не как символам подстановки. Выражение типа:: somecolumn.istartswith(«foo/%bar», escape=»^») будет выглядеть так:: lower(somecolumn) LIKE lower(:param) || „%“ ESCAPE „^“ Параметр также может быть объединен сColumnOperators.istartswith.autoescape
:: somecolumn.istartswith(«foo%bar^bat», escape=»^», autoescape=True) Где выше, заданный литеральный параметр будет преобразован в"foo^%bar^^bat"
перед передачей в базу данных.
См.также
-
method
sqlalchemy.orm.PropComparator.
like(other: Any, escape: Optional[str] = None) ColumnOperators ¶ наследуется от
ColumnOperators.like()
методаColumnOperators
Реализуйте оператор
like
.В контексте столбца выдает выражение:
a LIKE other
Например:
stmt = select(sometable).\ where(sometable.c.column.like("%foobar%"))
- Параметры:
other – сравниваемое выражение
escape – необязательный управляющий символ, отображает ключевое слово
ESCAPE
, например:: somecolumn.like(«foo/%bar», escape=»/»)
См.также
-
method
sqlalchemy.orm.PropComparator.
match(other: Any, **kwargs: Any) ColumnOperators ¶ наследуется от
ColumnOperators.match()
методаColumnOperators
Реализует специфический для базы данных оператор „match“.
ColumnOperators.match()
пытается преобразоваться в MATCH-подобную функцию или оператор, предоставляемый бэкендом. Примеры включают:PostgreSQL - выдает
x @@ plainto_tsquery(y)
.Изменено в версии 2.0:
plainto_tsquery()
теперь используется вместоto_tsquery()
для PostgreSQL; для совместимости с другими формами смотрите Полнотекстовый поиск.MySQL - выдает
MATCH (x) AGAINST (y IN BOOLEAN MODE)
.См.также
match
- специфическая для MySQL конструкция с дополнительными возможностями.Oracle - выдает
CONTAINS(x, y)
.другие бэкенды могут предоставлять специальные реализации.
Бэкенды без специальной реализации будут выдавать оператор как «MATCH». Это совместимо, например, с SQLite.
-
method
sqlalchemy.orm.PropComparator.
not_ilike(other: Any, escape: Optional[str] = None) ColumnOperators ¶ наследуется от
ColumnOperators.not_ilike()
методаColumnOperators
реализовать оператор
NOT ILIKE
.Это эквивалентно использованию отрицания с
ColumnOperators.ilike()
, то есть~x.ilike(y)
.Изменено в версии 1.4: Оператор
not_ilike()
переименован изnotilike()
в предыдущих выпусках. Предыдущее название остается доступным для обратной совместимости.См.также
-
method
sqlalchemy.orm.PropComparator.
not_in(other: Any) ColumnOperators ¶ наследуется от
ColumnOperators.not_in()
методаColumnOperators
реализовать оператор
NOT IN
.Это эквивалентно использованию отрицания с
ColumnOperators.in_()
, то есть~x.in_(y)
.В случае, если
other
является пустой последовательностью, компилятор выдает выражение «пусто не в». По умолчанию это выражение «1 = 1», которое во всех случаях выдает true. Для изменения этого поведения можно использоватьcreate_engine.empty_in_strategy
.Изменено в версии 1.4: Оператор
not_in()
переименован изnotin_()
в предыдущих выпусках. Предыдущее название остается доступным для обратной совместимости.Изменено в версии 1.2: Операторы
ColumnOperators.in_()
иColumnOperators.not_in()
теперь по умолчанию выдают «статическое» выражение для пустой последовательности IN.См.также
-
method
sqlalchemy.orm.PropComparator.
not_like(other: Any, escape: Optional[str] = None) ColumnOperators ¶ наследуется от
ColumnOperators.not_like()
методаColumnOperators
реализовать оператор
NOT LIKE
.Это эквивалентно использованию отрицания с
ColumnOperators.like()
, то есть~x.like(y)
.Изменено в версии 1.4: Оператор
not_like()
переименован изnotlike()
в предыдущих выпусках. Предыдущее название остается доступным для обратной совместимости.См.также
-
method
sqlalchemy.orm.PropComparator.
notilike(other: Any, escape: Optional[str] = None) ColumnOperators ¶ наследуется от
ColumnOperators.notilike()
методаColumnOperators
реализовать оператор
NOT ILIKE
.Это эквивалентно использованию отрицания с
ColumnOperators.ilike()
, то есть~x.ilike(y)
.Изменено в версии 1.4: Оператор
not_ilike()
переименован изnotilike()
в предыдущих выпусках. Предыдущее название остается доступным для обратной совместимости.См.также
-
method
sqlalchemy.orm.PropComparator.
notin_(other: Any) ColumnOperators ¶ наследуется от
ColumnOperators.notin_()
методаColumnOperators
реализовать оператор
NOT IN
.Это эквивалентно использованию отрицания с
ColumnOperators.in_()
, то есть~x.in_(y)
.В случае, если
other
является пустой последовательностью, компилятор выдает выражение «пусто не в». По умолчанию это выражение «1 = 1», которое во всех случаях выдает true. Для изменения этого поведения можно использоватьcreate_engine.empty_in_strategy
.Изменено в версии 1.4: Оператор
not_in()
переименован изnotin_()
в предыдущих выпусках. Предыдущее название остается доступным для обратной совместимости.Изменено в версии 1.2: Операторы
ColumnOperators.in_()
иColumnOperators.not_in()
теперь по умолчанию выдают «статическое» выражение для пустой последовательности IN.См.также
-
method
sqlalchemy.orm.PropComparator.
notlike(other: Any, escape: Optional[str] = None) ColumnOperators ¶ наследуется от
ColumnOperators.notlike()
методаColumnOperators
реализовать оператор
NOT LIKE
.Это эквивалентно использованию отрицания с
ColumnOperators.like()
, то есть~x.like(y)
.Изменено в версии 1.4: Оператор
not_like()
переименован изnotlike()
в предыдущих выпусках. Предыдущее название остается доступным для обратной совместимости.См.также
-
method
sqlalchemy.orm.PropComparator.
nulls_first() ColumnOperators ¶ наследуется от
ColumnOperators.nulls_first()
методаColumnOperators
Произведите предложение
nulls_first()
против родительского объекта.Изменено в версии 1.4: Оператор
nulls_first()
переименован изnullsfirst()
в предыдущих выпусках. Предыдущее название остается доступным для обратной совместимости.
-
method
sqlalchemy.orm.PropComparator.
nulls_last() ColumnOperators ¶ наследуется от
ColumnOperators.nulls_last()
методаColumnOperators
Произведите предложение
nulls_last()
против родительского объекта.Изменено в версии 1.4: Оператор
nulls_last()
переименован изnullslast()
в предыдущих выпусках. Предыдущее название остается доступным для обратной совместимости.
-
method
sqlalchemy.orm.PropComparator.
nullsfirst() ColumnOperators ¶ наследуется от
ColumnOperators.nullsfirst()
методаColumnOperators
Произведите предложение
nulls_first()
против родительского объекта.Изменено в версии 1.4: Оператор
nulls_first()
переименован изnullsfirst()
в предыдущих выпусках. Предыдущее название остается доступным для обратной совместимости.
-
method
sqlalchemy.orm.PropComparator.
nullslast() ColumnOperators ¶ наследуется от
ColumnOperators.nullslast()
методаColumnOperators
Произведите предложение
nulls_last()
против родительского объекта.Изменено в версии 1.4: Оператор
nulls_last()
переименован изnullslast()
в предыдущих выпусках. Предыдущее название остается доступным для обратной совместимости.
-
method
sqlalchemy.orm.PropComparator.
of_type(class_: _EntityType[Any]) PropComparator[_T] ¶ Переопределите этот объект в терминах полиморфного подкласса, конструкции
with_polymorphic()
или конструкцииaliased()
.Возвращает новый PropComparator, на основе которого может быть оценен дальнейший критерий.
например:
query.join(Company.employees.of_type(Engineer)).\ filter(Engineer.name=='foo')
- Параметры:
class_ – класс или маппер, указывающий, что критерий будет применяться к данному конкретному подклассу.
-
method
sqlalchemy.orm.PropComparator.
op(opstring: str, precedence: int = 0, is_comparison: bool = False, return_type: Optional[Union[Type[TypeEngine[Any]], TypeEngine[Any]]] = None, python_impl: Optional[Callable[..., Any]] = None) Callable[[Any], Operators] ¶ наследуется от
Operators.op()
методаOperators
Произведите общую операторную функцию.
например:
somecolumn.op("*")(5)
производит:
somecolumn * 5
Эта функция также может быть использована для того, чтобы сделать побитовые операторы явными. Например:
somecolumn.op('&')(0xff)
является побитовым И из значения в
somecolumn
.- Параметры:
opstring – строка, которая будет выведена в качестве инфиксного оператора между этим элементом и выражением, переданным в генерируемую функцию.
precedence – приоритет, который, как ожидается, будет применяться базой данных к оператору в выражениях SQL. Это целочисленное значение служит подсказкой для компилятора SQL, чтобы понять, когда вокруг конкретной операции следует поставить явную скобку. Меньшее число приводит к тому, что выражение будет заключено в скобки, когда оно применяется к другому оператору с более высоким приоритетом. Значение по умолчанию
0
ниже всех операторов, кроме операторов запятой (,
) иAS
. Значение 100 будет выше или равно всем операторам, а -100 будет ниже или равно всем операторам. … см. также:: Я использую op() для генерации пользовательского оператора, и мои скобки выходят неправильно - подробное описание того, как SQL-компилятор SQLAlchemy отображает круглые скобкиis_comparison – legacy; если True, оператор будет рассматриваться как оператор «сравнения», то есть оцениваться в булево значение true/false, как
==
,>
и т.д. Этот флаг предусмотрен для того, чтобы ORM-отношения могли установить, что оператор является оператором сравнения, когда он используется в пользовательском условии объединения. Использование параметраis_comparison
заменяется использованием методаOperators.bool_op()
; этот более лаконичный оператор устанавливает этот параметр автоматически, а также обеспечивает правильную поддержку типа PEP 484, поскольку возвращаемый объект будет выражать тип данных «boolean», т.е.BinaryExpression[bool]
.return_type – класс или объект
TypeEngine
, который заставит возвращаемый тип выражения, создаваемого этим оператором, быть этого типа. По умолчанию операторы, указывающиеOperators.op.is_comparison
, преобразуются вBoolean
, а те, которые не указывают, будут иметь тот же тип, что и левый операнд.python_impl – необязательная функция Python, которая может оценить два значения Python таким же образом, как этот оператор работает при запуске на сервере базы данных. Используется для функций оценки SQL-выражений in-Python, например, для гибридных атрибутов ORM, а также для «оценщика» ORM, используемого для сопоставления объектов в сессии после многорядного обновления или удаления. например:: >>> expr = column(„x“).op(„+“, python_impl=lambda a, b: a + b)(„y“) Оператор для приведенного выше выражения будет также работать для не-SQL левых и правых объектов:: >>> expr.operator(5, 10) 15 … versionadded:: 2.0
-
method
sqlalchemy.orm.PropComparator.
operate(op: OperatorType, *other: Any, **kwargs: Any) Operators ¶ наследуется от
Operators.operate()
методаOperators
Оперировать с аргументом.
Это самый низкий уровень работы, по умолчанию поднимает
NotImplementedError
.Переопределение этого параметра в подклассе может позволить применять общее поведение ко всем операциям. Например, переопределение
ColumnOperators
для примененияfunc.lower()
к левой и правой стороне:class MyComparator(ColumnOperators): def operate(self, op, other, **kwargs): return op(func.lower(self), func.lower(other), **kwargs)
- Параметры:
op – Вызов оператора.
*other – «другая» сторона операции. Для большинства операций это будет один скаляр.
**kwargs – модификаторы. Они могут передаваться специальными операторами, такими как
ColumnOperators.contains()
.
-
attribute
sqlalchemy.orm.PropComparator.
property¶ Возвращает
MapperProperty
, связанный с даннымPropComparator
.Возвращаемые значения здесь обычно являются экземплярами
ColumnProperty
илиRelationship
.
-
method
sqlalchemy.orm.PropComparator.
regexp_match(pattern: Any, flags: Optional[str] = None) ColumnOperators ¶ наследуется от
ColumnOperators.regexp_match()
методаColumnOperators
Реализует специфический для базы данных оператор „regexp match“.
Например:
stmt = select(table.c.some_column).where( table.c.some_column.regexp_match('^(b|c)') )
ColumnOperators.regexp_match()
пытается преобразоваться в REGEXP-подобную функцию или оператор, предоставляемый бэкендом, однако конкретный синтаксис регулярного выражения и доступные флаги не зависят от бэкенда.Примеры включают:
PostgreSQL - выдает
x ~ y
илиx !~ y
при отрицании.Oracle - выдает
REGEXP_LIKE(x, y)
.SQLite - использует оператор-заместитель SQLite
REGEXP
и обращается к встроенной программе Pythonre.match()
.другие бэкенды могут предоставлять специальные реализации.
Бэкенды без специальной реализации будут выдавать оператор как «REGEXP» или «NOT REGEXP». Это совместимо, например, с SQLite и MySQL.
В настоящее время поддержка регулярных выражений реализована для Oracle, PostgreSQL, MySQL и MariaDB. Частичная поддержка доступна для SQLite. Поддержка сторонних диалектов может отличаться.
- Параметры:
pattern – Строка шаблона регулярного выражения или предложение столбца.
flags – Любые флаги строк регулярных выражений для применения. Флаги, как правило, зависят от бэкенда. Это может быть строка или предложение столбца. Некоторые бэкенды, например PostgreSQL и MariaDB, могут альтернативно указывать флаги как часть шаблона. При использовании флага игнорирования регистра „i“ в PostgreSQL будет использован оператор соответствия регэкспа
~*
или!~*
.
Добавлено в версии 1.4.
См.также
-
method
sqlalchemy.orm.PropComparator.
regexp_replace(pattern: Any, replacement: Any, flags: Optional[str] = None) ColumnOperators ¶ наследуется от
ColumnOperators.regexp_replace()
методаColumnOperators
Реализует специфический для базы данных оператор „regexp replace“.
Например:
stmt = select( table.c.some_column.regexp_replace( 'b(..)', 'XY', flags='g' ) )
ColumnOperators.regexp_replace()
пытается разрешиться в REGEXP_REPLACE-подобную функцию, предоставляемую бэкендом, который обычно выдает функциюREGEXP_REPLACE()
. Однако конкретный синтаксис регулярного выражения и доступные флаги не зависят от бэкенда.Поддержка замены регулярных выражений в настоящее время реализована для Oracle, PostgreSQL, MySQL 8 или выше и MariaDB. Поддержка сторонних диалектов может отличаться.
- Параметры:
pattern – Строка шаблона регулярного выражения или предложение столбца.
pattern – Заменяющая строка или предложение столбца.
flags – Любые флаги строк регулярных выражений для применения. Флаги, как правило, зависят от бэкенда. Это может быть строка или предложение столбца. Некоторые бэкенды, например PostgreSQL и MariaDB, могут альтернативно указывать флаги как часть шаблона.
Добавлено в версии 1.4.
См.также
-
method
sqlalchemy.orm.PropComparator.
reverse_operate(op: OperatorType, other: Any, **kwargs: Any) Operators ¶ наследуется от
Operators.reverse_operate()
методаOperators
Обратное действие над аргументом.
Используется так же, как и
operate()
.
-
method
sqlalchemy.orm.PropComparator.
startswith(other: Any, escape: Optional[str] = None, autoescape: bool = False) ColumnOperators ¶ наследуется от
ColumnOperators.startswith()
методаColumnOperators
Реализуйте оператор
startswith
.Выдает выражение LIKE, которое проверяет совпадение с началом строкового значения:
column LIKE <other> || '%'
Например:
stmt = select(sometable).\ where(sometable.c.column.startswith("foobar"))
Поскольку оператор использует
LIKE
, символы подстановки"%"
и"_"
, присутствующие внутри выражения <other>, также будут вести себя как символы подстановки. Для буквальных строковых значений флагColumnOperators.startswith.autoescape
может быть установлен в значениеTrue
, чтобы применить экранирование к вхождениям этих символов в строковое значение так, чтобы они совпадали сами по себе, а не как символы подстановки. В качестве альтернативы, параметрColumnOperators.startswith.escape
устанавливает данный символ как символ экранирования, что может быть полезно, когда целевое выражение не является литеральной строкой.- Параметры:
other – выражение для сравнения. Обычно это обычное строковое значение, но может быть и произвольным выражением SQL. Символы подстановки LIKE
%
и_
по умолчанию не экранируются, если только флагColumnOperators.startswith.autoescape
не установлен в True.autoescape – boolean; при True устанавливает символ экранирования в выражении LIKE, затем применяет его ко всем вхождениям
"%"
,"_"
и самого символа экранирования в значении сравнения, которое считается литеральной строкой, а не выражением SQL. Выражение типа:: somecolumn.startswith(«foo%bar», autoescape=True) будет выглядеть так:: somecolumn LIKE :param || „%“ ESCAPE „/“ Со значением:param
как"foo/%bar"
.escape – символ, который при передаче будет отображаться с ключевым словом
ESCAPE
, чтобы установить этот символ в качестве управляющего символа. Затем этот символ может быть помещен перед вхождениями%
и_
, чтобы позволить им действовать как самим себе, а не как символам подстановки. Выражение типа:: somecolumn.startswith(«foo/%bar», escape=»^») будет выглядеть так:: somecolumn LIKE :param || „%“ ESCAPE „^“ Параметр также может быть объединен сColumnOperators.startswith.autoescape
:: somecolumn.startswith(«foo%bar^bat», escape=»^», autoescape=True) Где выше, данный литеральный параметр будет преобразован в"foo^%bar^^bat"
перед передачей в базу данных.
-
attribute
sqlalchemy.orm.PropComparator.
timetuple: Literal[None] = None¶ наследуется от
ColumnOperators.timetuple
атрибутаColumnOperators
Hack, позволяет сравнивать объекты времени даты на LHS.
-
method
- class sqlalchemy.orm.Relationship¶
Описывает свойство объекта, которое содержит один элемент или список элементов, соответствующих связанной таблице базы данных.
Публичный конструктор - это функция
relationship()
.См.также
Изменено в версии 2.0: Добавлен
Relationship
в качестве подкласса, совместимого с декларативным методом, дляRelationshipProperty
.Классная подпись
class
sqlalchemy.orm.Relationship
(sqlalchemy.orm.RelationshipProperty
,sqlalchemy.orm.base._DeclarativeMapped
,sqlalchemy.orm.base.WriteOnlyMapped
,sqlalchemy.orm.base.DynamicMapped
)
- class sqlalchemy.orm.RelationshipDirection¶
перечисление, которое указывает «направление»
RelationshipProperty
.RelationshipDirection
доступен из атрибутаRelationship.direction
вRelationshipProperty
.Members
Классная подпись
класс
sqlalchemy.orm.RelationshipDirection
(enum.Enum
)-
attribute
sqlalchemy.orm.RelationshipDirection.
MANYTOMANY = 3¶ Указывает направление «многие-ко-многим» для
relationship()
.Этот символ обычно используется внутренними модулями, но может быть раскрыт в некоторых функциях API.
-
attribute
sqlalchemy.orm.RelationshipDirection.
MANYTOONE = 2¶ Указывает направление «многие-к-одному» для
relationship()
.Этот символ обычно используется внутренними модулями, но может быть раскрыт в некоторых функциях API.
-
attribute
sqlalchemy.orm.RelationshipDirection.
ONETOMANY = 1¶ Указывает направление «один-ко-многим» для
relationship()
.Этот символ обычно используется внутренними модулями, но может быть раскрыт в некоторых функциях API.
-
attribute
- class sqlalchemy.orm.RelationshipProperty¶
Описывает свойство объекта, которое содержит один элемент или список элементов, соответствующих связанной таблице базы данных.
Публичный конструктор - это функция
relationship()
.См.также
Members
__eq__(), __init__(), __ne__(), adapt_to_entity(), and_(), any(), contains(), entity, has(), in_(), mapper, of_type(), cascade, cascade_iterator(), declarative_scan(), do_init(), entity, instrument_class(), mapper, merge()
Классная подпись
class
sqlalchemy.orm.RelationshipProperty
(sqlalchemy.orm._IntrospectsAnnotations
,sqlalchemy.orm.StrategizedProperty
,sqlalchemy.log.Identified
)- class Comparator¶
Производить булевы, сравнительные и другие операторы для атрибутов
RelationshipProperty
.См. документацию для
PropComparator
для краткого обзора определения оператора уровня ORM.Классная подпись
класс
sqlalchemy.orm.RelationshipProperty.Comparator
(sqlalchemy.util.langhelpers.MemoizedSlots
,sqlalchemy.orm.PropComparator
)-
method
sqlalchemy.orm.RelationshipProperty.Comparator.
__eq__(other: Any) ColumnElement[bool] ¶ Реализуйте оператор
==
.В контексте «многие к одному», например:
MyClass.some_prop == <some object>
обычно получается предложение типа:
mytable.related_id == <some id>
Где
<some id>
- первичный ключ данного объекта.Оператор
==
обеспечивает частичную функциональность для сравнений не «многие-к-одному»:Сравнение с коллекциями не поддерживается. Используйте
Comparator.contains()
.По сравнению со скалярным one-to-many выдает предложение, которое сравнивает целевые столбцы родителя с заданной целью.
По сравнению со скалярным many-to-many, псевдоним таблицы ассоциации также будет отображен, формируя естественное соединение, которое является частью основного тела запроса. Это не будет работать для запросов, которые выходят за рамки простой конъюнкции сравнений AND, например, тех, которые используют OR. Используйте явные соединения, внешние соединения или
Comparator.has()
для более полных скалярных тестов на принадлежность не «многие к одному».Сравнение с
None
, заданное в контексте «один ко многим» или «многие ко многим», дает предложение NOT EXISTS.
-
method
sqlalchemy.orm.RelationshipProperty.Comparator.
__init__(prop: RelationshipProperty[_PT], parentmapper: _InternalEntityType[Any], adapt_to_entity: Optional[AliasedInsp[Any]] = None, of_type: Optional[_EntityType[_PT]] = None, extra_criteria: Tuple[ColumnElement[bool], ...] = ())¶ Построение
Comparator
является внутренним для механики атрибутов ORM.
-
method
sqlalchemy.orm.RelationshipProperty.Comparator.
__ne__(other: Any) ColumnElement[bool] ¶ Реализуйте оператор
!=
.В контексте «многие к одному», например:
MyClass.some_prop != <some object>
Обычно это приводит к появлению такого пункта, как:
mytable.related_id != <some id>
Где
<some id>
- первичный ключ данного объекта.Оператор
!=
обеспечивает частичную функциональность для сравнений не «многие-к-одному»:Сравнение с коллекциями не поддерживается. Используйте
Comparator.contains()
в сочетании сnot_()
.По сравнению со скалярным one-to-many выдает предложение, которое сравнивает целевые столбцы родителя с заданной целью.
По сравнению со скалярным many-to-many, псевдоним таблицы ассоциации также будет отображен, формируя естественное соединение, которое является частью основного тела запроса. Это не будет работать для запросов, которые выходят за рамки простой конъюнкции сравнений AND, например, тех, которые используют OR. Используйте явные соединения, внешние соединения или
Comparator.has()
в сочетании сnot_()
для более полных скалярных тестов членства не «от человека к человеку».Сравнение с
None
, заданное в контексте «один ко многим» или «многие ко многим», дает предложение EXISTS.
-
method
sqlalchemy.orm.RelationshipProperty.Comparator.
adapt_to_entity(adapt_to_entity: AliasedInsp[Any]) RelationshipProperty.Comparator[Any] ¶ Возвращает копию этого PropComparator, который будет использовать заданные
AliasedInsp
для получения соответствующих выражений.
-
method
sqlalchemy.orm.RelationshipProperty.Comparator.
and_(*criteria: _ColumnExpressionArgument[bool]) PropComparator[Any] ¶ Добавьте критерии AND.
Смотрите пример
PropComparator.and_()
.Добавлено в версии 1.4.
-
method
sqlalchemy.orm.RelationshipProperty.Comparator.
any(criterion: Optional[_ColumnExpressionArgument[bool]] = None, **kwargs: Any) ColumnElement[bool] ¶ Создайте выражение, которое проверяет коллекцию по определенному критерию, используя EXISTS.
Выражение типа:
session.query(MyClass).filter( MyClass.somereference.any(SomeRelated.x==2) )
Получится запрос вида:
SELECT * FROM my_table WHERE EXISTS (SELECT 1 FROM related WHERE related.my_id=my_table.id AND related.x=2)
Поскольку
Comparator.any()
использует коррелированный подзапрос, его производительность при сравнении с большими целевыми таблицами не так высока, как при использовании объединения.Comparator.any()
особенно полезно для проверки пустых коллекций:session.query(MyClass).filter( ~MyClass.somereference.any() )
будет производить:
SELECT * FROM my_table WHERE NOT (EXISTS (SELECT 1 FROM related WHERE related.my_id=my_table.id))
Comparator.any()
действителен только для коллекций, т.е.relationship()
, который имеетuselist=True
. Для скалярных ссылок используйтеComparator.has()
.
-
method
sqlalchemy.orm.RelationshipProperty.Comparator.
contains(other: _ColumnExpressionArgument[Any], **kwargs: Any) ColumnElement[bool] ¶ Возвращает простое выражение, которое проверяет коллекцию на наличие в ней определенного элемента.
Comparator.contains()
действует только для коллекции, т.е.relationship()
, которая реализуется по принципу «один ко многим» или «многие ко многим» с помощьюuselist=True
.При использовании в простом контексте «один ко многим» выражение типа:
MyClass.contains(other)
Производит предложение типа:
mytable.id == <some id>
Где
<some id>
- это значение атрибута внешнего ключа наother
, который ссылается на первичный ключ родительского объекта. Из этого следует, чтоComparator.contains()
очень полезен при использовании с простыми операциями «один-ко-многим».Для операций «многие ко многим» поведение
Comparator.contains()
имеет больше оговорок. Таблица объединения будет отображаться в операторе, создавая «неявное» объединение, то есть включает несколько таблиц в предложение FROM, которые приравниваются в предложении WHERE:query(MyClass).filter(MyClass.contains(other))
Выдает запрос вида:
SELECT * FROM my_table, my_association_table AS my_association_table_1 WHERE my_table.id = my_association_table_1.parent_id AND my_association_table_1.child_id = <some id>
Где
<some id>
будет первичным ключомother
. Из вышесказанного ясно, чтоComparator.contains()
не будет работать с коллекциями «многие-ко-многим» при использовании в запросах, выходящих за рамки простых конъюнкций AND, таких как несколько выраженийComparator.contains()
, объединенных OR. В таких случаях необходимо использовать подзапросы или явные «внешние соединения». СмотритеComparator.any()
для менее производительной альтернативы с использованием EXISTS, или обратитесь кQuery.outerjoin()
, а также Присоединяйтесь к для более подробной информации о построении внешних объединений.kwargs могут игнорироваться этим оператором, но необходимы для соответствия API.
-
attribute
sqlalchemy.orm.RelationshipProperty.Comparator.
entity: _InternalEntityType[_PT]¶ Целевая сущность, на которую ссылается данный
Comparator
.Это либо объект
Mapper
, либоAliasedInsp
.Это «целевая» или «удаленная» сторона
relationship()
.
-
method
sqlalchemy.orm.RelationshipProperty.Comparator.
has(criterion: Optional[_ColumnExpressionArgument[bool]] = None, **kwargs: Any) ColumnElement[bool] ¶ Создайте выражение, которое проверяет скалярную ссылку на соответствие определенному критерию, используя EXISTS.
Выражение типа:
session.query(MyClass).filter( MyClass.somereference.has(SomeRelated.x==2) )
Получится запрос вида:
SELECT * FROM my_table WHERE EXISTS (SELECT 1 FROM related WHERE related.id==my_table.related_id AND related.x=2)
Поскольку
Comparator.has()
использует коррелированный подзапрос, его производительность при сравнении с большими целевыми таблицами не так высока, как при использовании объединения.Comparator.has()
действует только для скалярных ссылок, т.е.relationship()
, который имеетuselist=False
. Для ссылок на коллекции используйтеComparator.any()
.
-
method
sqlalchemy.orm.RelationshipProperty.Comparator.
in_(other: Any) NoReturn ¶ Производить предложение IN - на данный момент это не реализовано для атрибутов на основе
relationship()
.
-
attribute
sqlalchemy.orm.RelationshipProperty.Comparator.
mapper: Mapper[_PT]¶ Цель
Mapper
, на которую ссылается данныйComparator
.Это «целевая» или «удаленная» сторона
relationship()
.
-
method
sqlalchemy.orm.RelationshipProperty.Comparator.
of_type(class_: _EntityType[Any]) PropComparator[_PT] ¶ Переопределите этот объект в терминах полиморфного подкласса.
Смотрите пример
PropComparator.of_type()
.
-
method
-
attribute
sqlalchemy.orm.RelationshipProperty.
cascade¶ Возвращает текущую настройку каскада для данного
RelationshipProperty
.
-
method
sqlalchemy.orm.RelationshipProperty.
cascade_iterator(type_: str, state: InstanceState[Any], dict_: _InstanceDict, visited_states: Set[InstanceState[Any]], halt_on: Optional[Callable[[InstanceState[Any]], bool]] = None) Iterator[Tuple[Any, Mapper[Any], InstanceState[Any], _InstanceDict]] ¶ Итерация по экземплярам, связанным с данным экземпляром для определенного «каскада», начиная с данного MapperProperty.
Возвращает итератор3-кортежей (экземпляр, картограф, состояние).
Обратите внимание, что коллекция „cascade“ на этом MapperProperty сначала проверяется на данный тип перед вызовом cascade_iterator.
Этот метод обычно применяется только к Отношениям.
-
method
sqlalchemy.orm.RelationshipProperty.
declarative_scan(decl_scan: _ClassScanMapperConfig, registry: _RegistryType, cls: Type[Any], originating_module: Optional[str], key: str, mapped_container: Optional[Type[Mapped[Any]]], annotation: Optional[_AnnotationScanType], extracted_mapped_annotation: Optional[_AnnotationScanType], is_dataclass_field: bool) None ¶ Выполняйте специфическую для класса инициализацию на ранних стадиях декларативного сканирования.
Добавлено в версии 2.0.
-
method
sqlalchemy.orm.RelationshipProperty.
do_init() None ¶ Выполните шаги инициализации, специфичные для подклассов, после создания картографа.
Это шаблонный метод, вызываемый методом init() объекта
MapperProperty
.
-
attribute
sqlalchemy.orm.RelationshipProperty.
entity¶ Возвращает целевую сопоставленную сущность, которая является inspect() класса или псевдокласса, на который ссылается.
-
method
sqlalchemy.orm.RelationshipProperty.
instrument_class(mapper: Mapper[Any]) None ¶ Крючок, вызываемый маппером свойства для инициирования инструментации атрибута класса, управляемого этим MapperProperty.
Здесь MapperProperty обычно обращается к модулю атрибутов для установки InstrumentedAttribute.
Этот шаг является первым из двух шагов для установки InstrumentedAttribute, и вызывается в самом начале процесса настройки маппера.
Вторым шагом обычно является шаг init_class_attribute, вызываемый из StrategizedProperty через хук post_instrument_class(). Этот шаг назначает дополнительное состояние InstrumentedAttribute (в частности, «impl»), которое было определено после того, как MapperProperty определил, какой тип управления персистентностью ему нужно сделать (например, скаляр, объект, коллекция и т.д.).
-
attribute
sqlalchemy.orm.RelationshipProperty.
mapper¶ Возвращает целевой
Mapper
для данногоRelationshipProperty
.
-
method
sqlalchemy.orm.RelationshipProperty.
merge(session: Session, source_state: InstanceState[Any], source_dict: _InstanceDict, dest_state: InstanceState[Any], dest_dict: _InstanceDict, load: bool, _recursive: Dict[Any, object], _resolve_conflict_map: Dict[_IdentityKeyType[Any], object]) None ¶ Объединить атрибут, представленный этим
MapperProperty
, с объектом-источником и объектом-получателем.
- class sqlalchemy.orm.SQLORMExpression¶
Тип, который может использоваться для обозначения любого атрибута или объекта ORM-уровня, который действует вместо одного, в контексте построения SQL-выражения.
SQLORMExpression
расширяет ядроSQLColumnExpression
для добавления дополнительных методов SQL, специфичных для ORM, таких какPropComparator.of_type()
, и является частью основ дляInstrumentedAttribute
. Он может использоваться в типизации PEP 484 для указания аргументов или возвращаемых значений, которые должны вести себя как выражения атрибутов на уровне ORM.Добавлено в версии 2.0.0b4.
Классная подпись
class
sqlalchemy.orm.SQLORMExpression
(sqlalchemy.orm.base.SQLORMOperations
,sqlalchemy.sql.expression.SQLColumnExpression
,sqlalchemy.util.langhelpers.TypingOnly
)
- class sqlalchemy.orm.Synonym¶
Декларативный внешний интерфейс для класса
SynonymProperty
.Публичный конструктор - это функция
synonym()
.Изменено в версии 2.0: Добавлено
Synonym
в качестве подкласса, совместимого с декларативным методом, дляSynonymProperty
См.также
Синонимы - Обзор синонимов
Классная подпись
класс
sqlalchemy.orm.Synonym
(sqlalchemy.orm.descriptor_props.SynonymProperty
,sqlalchemy.orm.base._DeclarativeMapped
)
- class sqlalchemy.orm.SynonymProperty¶
Обозначьте имя атрибута как синоним сопоставленного свойства, в том смысле, что атрибут будет отражать значение и поведение выражения другого атрибута.
Synonym
строится с помощью функцииsynonym()
.См.также
Синонимы - Обзор синонимов
Members
doc, info, key, parent, set_parent(), uses_objects
Классная подпись
класс
sqlalchemy.orm.SynonymProperty
(sqlalchemy.orm.descriptor_props.DescriptorProperty
)-
attribute
sqlalchemy.orm.SynonymProperty.
doc: Optional[str]¶ наследуется от
DescriptorProperty.doc
атрибутаDescriptorProperty
необязательная строка документации
-
attribute
sqlalchemy.orm.SynonymProperty.
info: _InfoType¶ наследуется от
MapperProperty.info
атрибутаMapperProperty
Информационный словарь, связанный с объектом, позволяющий связать пользовательские данные с этим
InspectionAttr
.Словарь создается при первом обращении к нему. В качестве альтернативы он может быть указан как аргумент конструктора функций
column_property()
,relationship()
илиcomposite()
.
-
attribute
sqlalchemy.orm.SynonymProperty.
key: str¶ наследуется от
MapperProperty.key
атрибутаMapperProperty
имя атрибута класса
-
attribute
sqlalchemy.orm.SynonymProperty.
parent: Mapper[Any]¶ наследуется от
MapperProperty.parent
атрибутаMapperProperty
Mapper
, управляющий этим свойством.
-
method
sqlalchemy.orm.SynonymProperty.
set_parent(parent: Mapper[Any], init: bool) None ¶ Установите родительский маппер, который ссылается на этот MapperProperty.
Этот метод переопределяется некоторыми подклассами для выполнения дополнительной настройки при первом знакомстве с картографом.
-
attribute
sqlalchemy.orm.SynonymProperty.
uses_objects¶
-
attribute
- class sqlalchemy.orm.QueryContext¶
- class default_load_options¶
Классная подпись
класс
sqlalchemy.orm.QueryContext.default_load_options
(sqlalchemy.sql.expression.Options
)
- class sqlalchemy.orm.QueryableAttribute¶
Базовый класс для объектов descriptor, которые перехватывают события атрибутов от имени объекта
MapperProperty
. СобственноMapperProperty
доступен через атрибутQueryableAttribute.property
.Members
adapt_to_entity(), and_(), expression, info, is_attribute, of_type(), operate(), parent, reverse_operate()
Классная подпись
class
sqlalchemy.orm.QueryableAttribute
(sqlalchemy.orm.base._DeclarativeMapped
,sqlalchemy.orm.base.SQLORMExpression
,sqlalchemy.orm.base.InspectionAttr
,sqlalchemy.orm.PropComparator
,sqlalchemy.sql.roles.JoinTargetRole
,sqlalchemy.sql.roles.OnClauseRole
,sqlalchemy.sql.expression.Immutable
,sqlalchemy.sql.cache_key.SlotsMemoizedHasCacheKey
,sqlalchemy.util.langhelpers.MemoizedSlots
,sqlalchemy.event.registry.EventTarget
)-
method
sqlalchemy.orm.QueryableAttribute.
adapt_to_entity(adapt_to_entity: AliasedInsp[Any]) Self ¶ Возвращает копию этого PropComparator, который будет использовать заданные
AliasedInsp
для получения соответствующих выражений.
-
method
sqlalchemy.orm.QueryableAttribute.
and_(*clauses: _ColumnExpressionArgument[bool]) QueryableAttribute[bool] ¶ Добавьте дополнительные критерии к предложению ON, которое представлено этим атрибутом отношения.
Например:
stmt = select(User).join( User.addresses.and_(Address.email_address != 'foo') ) stmt = select(User).options( joinedload(User.addresses.and_(Address.email_address != 'foo')) )
Добавлено в версии 1.4.
-
attribute
sqlalchemy.orm.QueryableAttribute.
expression: ColumnElement[_T]¶ Объект выражения SQL, представленный данным
QueryableAttribute
.Обычно это экземпляр подкласса
ColumnElement
, представляющий выражение столбца.
-
attribute
sqlalchemy.orm.QueryableAttribute.
info¶ Возвращает словарь „info“ для базового элемента SQL.
Поведение здесь следующее:
Если атрибут является свойством, отображенным на столбец, т.е.
ColumnProperty
, которое отображено непосредственно на объект уровня схемыColumn
, то этот атрибут вернет словарьSchemaItem.info
, связанный с объектом уровня ядраColumn
.Если атрибут является
ColumnProperty
, но сопоставлен с любым другим видом SQL выражения, отличным отColumn
, атрибут будет ссылаться на словарьMapperProperty.info
, связанный непосредственно сColumnProperty
, при условии, что само SQL выражение не имеет собственного атрибута.info
(так и должно быть, если только пользовательская SQL конструкция не определила его).Если атрибут ссылается на любой другой вид
MapperProperty
, включаяRelationship
, атрибут будет ссылаться на словарьMapperProperty.info
, связанный с этимMapperProperty
.Для безусловного доступа к словарю
MapperProperty.info
словаряMapperProperty
, в том числе дляColumnProperty
, связанного непосредственно сColumn
, на атрибут можно ссылаться с помощью атрибутаQueryableAttribute.property
, какMyClass.someattribute.property.info
.
-
attribute
sqlalchemy.orm.QueryableAttribute.
is_attribute = True¶ True, если этот объект является Python descriptor.
Это может относиться к одному из многих типов. Обычно это
QueryableAttribute
, который обрабатывает события атрибутов от имениMapperProperty
. Но также может быть типом расширения, таким какAssociationProxy
илиhybrid_property
.InspectionAttr.extension_type
будет ссылаться на константу, идентифицирующую конкретный подтип.См.также
-
method
sqlalchemy.orm.QueryableAttribute.
of_type(entity: _EntityType[Any]) QueryableAttribute[_T] ¶ Переопределите этот объект в терминах полиморфного подкласса, конструкции
with_polymorphic()
или конструкцииaliased()
.Возвращает новый PropComparator, на основе которого может быть оценен дальнейший критерий.
например:
query.join(Company.employees.of_type(Engineer)).\ filter(Engineer.name=='foo')
- Параметры:
class_ – класс или маппер, указывающий, что критерий будет применяться к данному конкретному подклассу.
-
method
sqlalchemy.orm.QueryableAttribute.
operate(op: OperatorType, *other: Any, **kwargs: Any) ColumnElement[Any] ¶ Оперировать с аргументом.
Это самый низкий уровень работы, по умолчанию поднимает
NotImplementedError
.Переопределение этого параметра в подклассе может позволить применять общее поведение ко всем операциям. Например, переопределение
ColumnOperators
для примененияfunc.lower()
к левой и правой стороне:class MyComparator(ColumnOperators): def operate(self, op, other, **kwargs): return op(func.lower(self), func.lower(other), **kwargs)
- Параметры:
op – Вызов оператора.
*other – «другая» сторона операции. Для большинства операций это будет один скаляр.
**kwargs – модификаторы. Они могут передаваться специальными операторами, такими как
ColumnOperators.contains()
.
-
attribute
sqlalchemy.orm.QueryableAttribute.
parent: _InternalEntityType[Any]¶ Возвращает экземпляр инспекции, представляющий родителя.
Это будет либо экземпляр
Mapper
, либоAliasedInsp
, в зависимости от природы родительской сущности, с которой связан этот атрибут.
-
method
sqlalchemy.orm.QueryableAttribute.
reverse_operate(op: OperatorType, other: Any, **kwargs: Any) ColumnElement[Any] ¶ Обратное действие над аргументом.
Используется так же, как и
operate()
.
-
method
- class sqlalchemy.orm.UOWTransaction¶
-
method
sqlalchemy.orm.UOWTransaction.
filter_states_for_dep(dep, states)¶ Отфильтровать заданный список InstanceStates до тех, которые относятся к данному DependencyProcessor.
-
method
sqlalchemy.orm.UOWTransaction.
finalize_flush_changes() None ¶ Пометить обработанные объекты как чистые / удаленные после успешного flush().
Этот метод вызывается в рамках метода flush() после успешного выполнения метода execute() и фиксации транзакции.
-
method
sqlalchemy.orm.UOWTransaction.
get_attribute_history(state, key, passive=symbol('PASSIVE_NO_INITIALIZE'))¶ Фасад для attributes.get_state_history(), включая кэширование результатов.
-
method
sqlalchemy.orm.UOWTransaction.
is_deleted(state)¶ Возвращает
True
, если данное состояние помечено как удаленное в рамках данной uowtransaction.
-
method
sqlalchemy.orm.UOWTransaction.
remove_state_actions(state)¶ Удаление отложенных действий для состояния из uowtransaction.
Members
filter_states_for_dep(), finalize_flush_changes(), get_attribute_history(), is_deleted(), remove_state_actions(), was_already_deleted()
-
method
sqlalchemy.orm.UOWTransaction.
was_already_deleted(state)¶ Возвращает
True
, если данное состояние просрочено и было удалено ранее.
-
method