Основополагающие конструкции языка выражений SQL

Базовые классы и миксины, которые используются для составления элементов языка SQL Expression Language.

Object Name Description

CacheKey

Ключ, используемый для идентификации конструкции оператора SQL в кэше компиляции SQL.

ClauseElement

Базовый класс для элементов программно построенного выражения SQL.

DialectKWArgs

Создайте возможность для класса иметь специфические для диалекта аргументы с параметрами по умолчанию и проверкой конструктора.

HasCacheKey

Миксин для объектов, которые могут создавать ключ кэша.

LambdaElement

Конструкция SQL, в которой состояние хранится как невызванная лямбда.

StatementLambdaElement

Представьте составной оператор SQL в виде LambdaElement.

class sqlalchemy.sql.expression.CacheKey

Ключ, используемый для идентификации конструкции оператора SQL в кэше компиляции SQL.

Классная подпись

класс sqlalchemy.sql.expression.CacheKey (builtins.tuple)

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

Псевдоним для поля номер 1

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

Псевдоним для номера поля 0

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

Сгенерируйте «автономную строку» в форме этой CacheKey.

Строка «offline» - это, по сути, строка SQL для оператора плюс последовательное повторение значений связанных параметров. Если объект CacheKey зависит от идентификаторов в памяти, чтобы работать в качестве ключа кэша, то «автономная» версия подходит для кэша, который будет работать и для других процессов.

Данный statement_cache является словареподобным объектом, в котором будет кэшироваться строковая форма самого утверждения. Этот словарь должен находиться в более долгоживущей области видимости, чтобы уменьшить время, затрачиваемое на построчную обработку утверждений.

class sqlalchemy.sql.expression.ClauseElement

Базовый класс для элементов программно построенного выражения SQL.

Классная подпись

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

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

Сравните это ClauseElement с заданным ClauseElement.

Подклассы должны переопределить поведение по умолчанию, которое представляет собой прямое сравнение идентичности.

**kw - это аргументы, потребляемые методами подкласса compare() и могут быть использованы для изменения критериев сравнения (см. ColumnElement).

method sqlalchemy.sql.expression.ClauseElement.compile(bind: Optional[Union[Engine, Connection]] = None, dialect: Optional[Dialect] = None, **kw: Any) Compiled

наследуется от CompilerElement.compile() метода CompilerElement

Составьте это SQL-выражение.

Возвращаемое значение представляет собой объект Compiled. Вызов str() или unicode() на возвращаемом значении даст строковое представление результата. Объект Compiled также может возвращать словарь имен и значений параметров связывания, используя аксессор params.

Параметры:
  • bind – Параметр Connection или Engine, который может предоставить Dialect для генерации объекта Compiled. Если параметры bind и dialect опущены, используется компилятор SQL по умолчанию.

  • column_keys – Используется для операторов INSERT и UPDATE, список имен столбцов, которые должны присутствовать в предложении VALUES скомпилированного оператора. Если None, отображаются все столбцы из целевого объекта таблицы.

  • dialect – Экземпляр Dialect, который может генерировать объект Compiled. Этот аргумент имеет приоритет над аргументом bind.

  • compile_kwargs – необязательный словарь дополнительных параметров, которые будут передаваться компилятору во всех методах «visit». Это позволяет передавать любой пользовательский флаг, например, в пользовательскую конструкцию компиляции. Он также используется для случая передачи флага literal_binds:: from sqlalchemy.sql import table, column, select t = table(„t“, column(„x“)) s = select(t).where(t.c.x == 5) print(s.compile(compile_kwargs={«literal_binds»: True}))

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

наследуется от HasTraverseInternals.get_children() метода HasTraverseInternals

Возвращает непосредственные дочерние HasTraverseInternals элементы данного HasTraverseInternals.

Используется для обхода посещений.

**kw может содержать флаги, изменяющие возвращаемую коллекцию, например, для возврата подмножества элементов, чтобы сократить время обхода, или для возврата дочерних элементов из другого контекста (например, коллекции на уровне схемы, а не на уровне пункта).

attribute sqlalchemy.sql.expression.ClauseElement.inherit_cache: Optional[bool] = None

наследуется от HasCacheKey.inherit_cache атрибута HasCacheKey

Укажите, должен ли данный экземпляр HasCacheKey использовать схему генерации ключей кэша, используемую его непосредственным суперклассом.

По умолчанию атрибут имеет значение None, что указывает на то, что конструкция еще не приняла во внимание целесообразность ее участия в кэшировании; функционально это эквивалентно установке значения False, за исключением того, что при этом выдается предупреждение.

Этот флаг может быть установлен в True на определенном классе, если SQL, соответствующий объекту, не изменяется на основе атрибутов, локальных для этого класса, а не его суперкласса.

См.также

Включение поддержки кэширования для пользовательских конструкций - общие направляющие для установки атрибута HasCacheKey.inherit_cache для сторонних или определенных пользователем конструкций SQL.

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

Возвращает копию с замененными элементами bindparam().

Возвращает копию данного ClauseElement с элементами bindparam(), замененными значениями, взятыми из данного словаря:

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

Примените «группировку» к этому ClauseElement.

Этот метод переопределяется подклассами для возврата конструкции «группировки», т.е. круглой скобки. В частности, она используется «бинарными» выражениями для обеспечения группировки вокруг себя при помещении в более крупное выражение, а также конструкциями select() при помещении в предложение FROM другого select(). (Обратите внимание, что подзапросы обычно следует создавать с помощью метода Select.alias(), поскольку многие платформы требуют, чтобы вложенные операторы SELECT были именованными).

Поскольку выражения составляются вместе, применение self_group() происходит автоматически - код конечного пользователя никогда не должен использовать этот метод напрямую. Обратите внимание, что в конструкциях клаузул SQLAlchemy учитывается приоритет операторов - поэтому скобки могут не понадобиться, например, в выражении x OR (y AND z) - AND имеет приоритет над OR.

Базовый метод self_group() ClauseElement просто возвращает self.

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

Возвращает копию с замененными элементами bindparam().

Та же функциональность, что и ClauseElement.params(), за исключением добавления unique=True к параметрам привязки, чтобы можно было использовать несколько утверждений.

class sqlalchemy.sql.base.DialectKWArgs

Создайте возможность для класса иметь специфические для диалекта аргументы с параметрами по умолчанию и проверкой конструктора.

DialectKWArgs взаимодействует с DefaultDialect.construct_arguments, присутствующим на диалекте.

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

Добавьте новый вид аргумента ключевого слова, специфичного для диалекта, для этого класса.

Например:

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

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

Метод DialectKWArgs.argument_for() является способом добавления дополнительных аргументов в словарь DefaultDialect.construct_arguments. Этот словарь содержит список имен аргументов, принимаемых различными конструкциями уровня схемы от имени диалекта.

Новые диалекты, как правило, должны определять этот словарь сразу как член данных класса диалекта. Случаи добавления имен аргументов ad-hoc обычно используются для кода конечного пользователя, который также использует пользовательскую схему компиляции, потребляющую дополнительные аргументы.

Параметры:
  • dialect_name – имя диалекта. Диалект должен быть локализуемым, в противном случае выдается сообщение NoSuchModuleError. Диалект также должен включать существующую коллекцию DefaultDialect.construct_arguments, указывающую на то, что он участвует в системе проверки ключевых слов-аргументов и умолчаний, иначе будет выдано ArgumentError. Если диалект не включает эту коллекцию, то любой аргумент ключевого слова может быть указан от имени уже этого диалекта. Все диалекты, упакованные в SQLAlchemy, включают эту коллекцию, однако для диалектов сторонних производителей поддержка может отличаться.

  • argument_name – имя параметра.

  • default – значение параметра по умолчанию.

attribute sqlalchemy.sql.base.DialectKWArgs.dialect_kwargs

Набор аргументов ключевых слов, заданных как специфические для диалекта опции этой конструкции.

Аргументы представлены здесь в их оригинальном формате <dialect>_<kwarg>. Включены только те аргументы, которые действительно были переданы; в отличие от коллекции DialectKWArgs.dialect_options, которая содержит все опции, известные этому диалекту, включая значения по умолчанию.

Коллекция также доступна для записи; ключи принимаются в форме <dialect>_<kwarg>, где значение будет собрано в список опций.

См.также

DialectKWArgs.dialect_options - форма вложенного словаря

attribute sqlalchemy.sql.base.DialectKWArgs.dialect_options

Набор аргументов ключевых слов, заданных как специфические для диалекта опции этой конструкции.

Это двухуровневый вложенный реестр, ключами которого являются <dialect_name> и <argument_name>. Например, аргумент postgresql_where можно найти как:

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

Добавлено в версии 0.9.2.

См.также

DialectKWArgs.dialect_kwargs - плоская словарная форма

attribute sqlalchemy.sql.base.DialectKWArgs.kwargs

Синоним для DialectKWArgs.dialect_kwargs.

class sqlalchemy.sql.traversals.HasCacheKey

Миксин для объектов, которые могут создавать ключ кэша.

Этот класс обычно находится в иерархии, которая начинается с базы HasTraverseInternals, но это необязательно. В настоящее время класс должен быть способен работать самостоятельно, не включая HasTraverseInternals.

Members

inherit_cache

attribute sqlalchemy.sql.traversals.HasCacheKey.inherit_cache: Optional[bool] = None

Укажите, должен ли данный экземпляр HasCacheKey использовать схему генерации ключей кэша, используемую его непосредственным суперклассом.

По умолчанию атрибут имеет значение None, что указывает на то, что конструкция еще не приняла во внимание целесообразность ее участия в кэшировании; функционально это эквивалентно установке значения False, за исключением того, что при этом выдается предупреждение.

Этот флаг может быть установлен в True на определенном классе, если SQL, соответствующий объекту, не изменяется на основе атрибутов, локальных для этого класса, а не его суперкласса.

См.также

Включение поддержки кэширования для пользовательских конструкций - общие направляющие для установки атрибута HasCacheKey.inherit_cache для сторонних или определенных пользователем конструкций SQL.

class sqlalchemy.sql.expression.LambdaElement

Конструкция SQL, в которой состояние хранится как невызванная лямбда.

LambdaElement производится прозрачно при передаче лямбда-выражений в конструкциях SQL, таких как:

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

LambdaElement является основой StatementLambdaElement, которая представляет собой полный оператор внутри лямбды.

Добавлено в версии 1.4.

class sqlalchemy.sql.expression.StatementLambdaElement

Представьте составной оператор SQL в виде LambdaElement.

Функция StatementLambdaElement строится с помощью функции lambda_stmt():

from sqlalchemy import lambda_stmt

stmt = lambda_stmt(lambda: select(table))

После построения, дополнительные критерии могут быть встроены в утверждение путем добавления последующих лямбд, которые принимают существующий объект утверждения в качестве единственного параметра:

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

Добавлено в версии 1.4.

Классная подпись

class sqlalchemy.sql.expression.StatementLambdaElement (sqlalchemy.sql.roles.AllowsLambdaRole, sqlalchemy.sql.lambdas.LambdaElement, sqlalchemy.sql.expression.Executable)

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

Добавьте новые критерии к этому StatementLambdaElement.

Например:

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

Метод StatementLambdaElement.add_criteria() эквивалентен использованию оператора сложения Python для добавления новой лямбды, за исключением того, что могут быть добавлены дополнительные аргументы, включая track_closure_values и track_on:

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

Описание принимаемых параметров см. в lambda_stmt().

attribute sqlalchemy.sql.expression.StatementLambdaElement.is_delete
attribute sqlalchemy.sql.expression.StatementLambdaElement.is_dml
attribute sqlalchemy.sql.expression.StatementLambdaElement.is_insert
attribute sqlalchemy.sql.expression.StatementLambdaElement.is_select
attribute sqlalchemy.sql.expression.StatementLambdaElement.is_text
attribute sqlalchemy.sql.expression.StatementLambdaElement.is_update
method sqlalchemy.sql.expression.StatementLambdaElement.spoil() NullLambdaStatement

Возвращает новый StatementLambdaElement, который будет каждый раз безусловно выполнять все лямбды.

Вернуться на верх