Основополагающие конструкции языка выражений SQL¶
Базовые классы и миксины, которые используются для составления элементов языка SQL Expression Language.
Object Name | Description |
---|---|
Ключ, используемый для идентификации конструкции оператора SQL в кэше компиляции SQL. |
|
Базовый класс для элементов программно построенного выражения SQL. |
|
Создайте возможность для класса иметь специфические для диалекта аргументы с параметрами по умолчанию и проверкой конструктора. |
|
Миксин для объектов, которые могут создавать ключ кэша. |
|
Конструкция SQL, в которой состояние хранится как невызванная лямбда. |
|
Представьте составной оператор SQL в виде |
- class sqlalchemy.sql.expression.CacheKey¶
Ключ, используемый для идентификации конструкции оператора SQL в кэше компиляции SQL.
См.также
Members
Классная подпись
класс
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
является словареподобным объектом, в котором будет кэшироваться строковая форма самого утверждения. Этот словарь должен находиться в более долгоживущей области видимости, чтобы уменьшить время, затрачиваемое на построчную обработку утверждений.
-
attribute
- class sqlalchemy.sql.expression.ClauseElement¶
Базовый класс для элементов программно построенного выражения SQL.
Members
compare(), compile(), get_children(), inherit_cache, params(), self_group(), unique_params()
Классная подпись
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 к параметрам привязки, чтобы можно было использовать несколько утверждений.
-
method
- class sqlalchemy.sql.base.DialectKWArgs¶
Создайте возможность для класса иметь специфические для диалекта аргументы с параметрами по умолчанию и проверкой конструктора.
DialectKWArgs
взаимодействует сDefaultDialect.construct_arguments
, присутствующим на диалекте.Members
См.также
-
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
.
-
classmethod
- class sqlalchemy.sql.traversals.HasCacheKey¶
Миксин для объектов, которые могут создавать ключ кэша.
Этот класс обычно находится в иерархии, которая начинается с базы
HasTraverseInternals
, но это необязательно. В настоящее время класс должен быть способен работать самостоятельно, не включаяHasTraverseInternals
.Members
-
attribute
sqlalchemy.sql.traversals.HasCacheKey.
inherit_cache: Optional[bool] = None¶ Укажите, должен ли данный экземпляр
HasCacheKey
использовать схему генерации ключей кэша, используемую его непосредственным суперклассом.По умолчанию атрибут имеет значение
None
, что указывает на то, что конструкция еще не приняла во внимание целесообразность ее участия в кэшировании; функционально это эквивалентно установке значенияFalse
, за исключением того, что при этом выдается предупреждение.Этот флаг может быть установлен в
True
на определенном классе, если SQL, соответствующий объекту, не изменяется на основе атрибутов, локальных для этого класса, а не его суперкласса.См.также
Включение поддержки кэширования для пользовательских конструкций - общие направляющие для установки атрибута
HasCacheKey.inherit_cache
для сторонних или определенных пользователем конструкций SQL.
-
attribute
- class sqlalchemy.sql.expression.LambdaElement¶
Конструкция SQL, в которой состояние хранится как невызванная лямбда.
LambdaElement
производится прозрачно при передаче лямбда-выражений в конструкциях SQL, таких как:stmt = select(table).where(lambda: table.c.col == parameter)
LambdaElement
является основойStatementLambdaElement
, которая представляет собой полный оператор внутри лямбды.Добавлено в версии 1.4.
Классная подпись
класс
sqlalchemy.sql.expression.LambdaElement
(sqlalchemy.sql.expression.ClauseElement
)
- 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
, который будет каждый раз безусловно выполнять все лямбды.
-
method