SQL и общие функции¶
Функции SQL вызываются с помощью пространства имен func
. О том, как использовать объект func
для отображения функций SQL в операторы, см. в учебном пособии Работа с функциями SQL.
Функциональный API¶
Базовый API для функций SQL, который предусматривает пространство имен func
, а также классы, которые могут быть использованы для расширения.
Object Name | Description |
---|---|
Определите функцию в формате «ansi», который не выводит скобки. |
|
Опишите именованную функцию SQL. |
|
База для функционально-ориентированных конструкций SQL. |
|
Определите «общую» функцию. |
|
register_function(identifier, fn[, package]) |
Привязать вызываемую функцию к определенному имени функции. |
- class sqlalchemy.sql.functions.AnsiFunction¶
Определите функцию в формате «ansi», который не выводит скобки.
Классная подпись
класс
sqlalchemy.sql.functions.AnsiFunction
(sqlalchemy.sql.functions.GenericFunction
)
- class sqlalchemy.sql.functions.Function¶
Опишите именованную функцию SQL.
Объект
Function
обычно генерируется из объекта генерацииfunc
.- Параметры:
*clauses – список выражений столбцов, которые формируют аргументы вызова функции SQL.
type_ – необязательный объект типа данных
TypeEngine
, который будет использоваться в качестве возвращаемого значения выражения столбца, сгенерированного этим вызовом функции.packagenames – строка, указывающая префиксные имена пакетов, которые будут добавлены к имени функции при генерации SQL. Генератор
func
создает их при вызове, используя точечный формат, например:: func.mypackage.some_function(col1, col2)
См.также
Работа с функциями SQL - в Унифицированный учебник по SQLAlchemy
func
- пространство имен, которое производит зарегистрированные или специальныеFunction
экземпляры.GenericFunction
- позволяет создавать зарегистрированные типы функций.Members
Классная подпись
класс
sqlalchemy.sql.functions.Function
(sqlalchemy.sql.functions.FunctionElement
)
- class sqlalchemy.sql.functions.FunctionElement¶
База для функционально-ориентированных конструкций SQL.
Это generic type, что означает, что программы проверки типов и IDE могут быть проинструктированы о том, какие типы следует ожидать в
Result
для этой функции. СмотритеGenericFunction
для примера того, как это делается.См.также
Работа с функциями SQL - в Унифицированный учебник по SQLAlchemy
Function
- именованная SQL-функция.func
- пространство имен, которое производит зарегистрированные или специальныеFunction
экземпляры.GenericFunction
- позволяет создавать зарегистрированные типы функций.Members
__init__(), alias(), as_comparison(), c, clauses, column_valued(), columns, entity_namespace, exported_columns, filter(), over(), scalar_table_valued(), select(), self_group(), table_valued(), within_group(), within_group_type()
Классная подпись
class
sqlalchemy.sql.functions.FunctionElement
(sqlalchemy.sql.expression.Executable
,sqlalchemy.sql.expression.ColumnElement
,sqlalchemy.sql.expression.FromClause
,sqlalchemy.sql.expression.Generative
)-
method
sqlalchemy.sql.functions.FunctionElement.
__init__(*clauses: Any)¶ Сконструируйте
FunctionElement
.- Параметры:
*clauses – список выражений столбцов, которые формируют аргументы вызова функции SQL.
**kwargs – дополнительные kwargs обычно потребляются подклассами.
-
method
sqlalchemy.sql.functions.FunctionElement.
alias(name=None, joins_implicitly=False)¶ Произведите конструкцию
Alias
против этойFunctionElement
.Совет
Метод
FunctionElement.alias()
является частью механизма, с помощью которого создаются «табличные» функции SQL. Однако большинство случаев использования покрывается методами более высокого уровня наFunctionElement
, включаяFunctionElement.table_valued()
иFunctionElement.column_valued()
.Эта конструкция оборачивает функцию в именованный псевдоним, который подходит для предложения FROM, в стиле, принятом, например, в PostgreSQL. Выражение столбца также предоставляется с помощью специального атрибута
.column
, который может использоваться для ссылки на выход функции как на скалярное значение в столбцах или в предложении where для бэкенда, например, PostgreSQL.Для выражения с полным табличным значением сначала используйте метод
FunctionElement.table_valued()
, чтобы установить именованные столбцы.например:
>>> from sqlalchemy import func, select, column >>> data_view = func.unnest([1, 2, 3]).alias("data_view") >>> print(select(data_view.column)) {printsql}SELECT data_view FROM unnest(:unnest_1) AS data_view
Метод
FunctionElement.column_valued()
обеспечивает сокращение вышеупомянутого шаблона:>>> data_view = func.unnest([1, 2, 3]).column_valued("data_view") >>> print(select(data_view)) {printsql}SELECT data_view FROM unnest(:unnest_1) AS data_view
Добавлено в версии 1.4.0b2: Добавлен аксессор
.column
- Параметры:
name – имя псевдонима, будет отображаться как
AS <name>
в предложении FROMjoins_implicitly – при значении True табличная функция может быть использована в предложении FROM без явного JOIN с другими таблицами в SQL-запросе, и предупреждение о «картезианском произведении» не будет выдано. Может быть полезно для таких SQL-функций, как
func.json_each()
. … versionadded:: 1.4.33
-
method
sqlalchemy.sql.functions.FunctionElement.
as_comparison(left_index, right_index)¶ Интерпретируйте это выражение как булево сравнение между двумя значениями.
Этот метод используется для случая использования ORM, описанного в Пользовательские операторы на основе функций SQL.
Гипотетическая SQL-функция «is_equal()», которая сравнивает значения на равенство, была бы записана на языке выражений Core как:
expr = func.is_equal("a", "b")
Если «is_equal()» выше сравнивает «a» и «b» на равенство, то метод
FunctionElement.as_comparison()
будет вызван как:expr = func.is_equal("a", "b").as_comparison(1, 2)
Где выше, целочисленное значение «1» относится к первому аргументу функции «is_equal()», а целочисленное значение «2» - ко второму.
Это создаст
BinaryExpression
, что эквивалентно:BinaryExpression("a", "b", operator=op.eq)
Однако на уровне SQL это все равно будет выглядеть как «is_equal(„a“, „b“)».
ORM, когда он загружает связанный объект или коллекцию, должен иметь возможность манипулировать «левой» и «правой» сторонами предложения ON выражения JOIN. Цель этого метода - предоставить конструкцию функции SQL, которая также может предоставлять эту информацию ORM, когда используется с параметром
relationship.primaryjoin
. Возвращаемым значением является объект содержимого с именемFunctionAsBinary
.Пример ORM выглядит следующим образом:
class Venue(Base): __tablename__ = 'venue' id = Column(Integer, primary_key=True) name = Column(String) descendants = relationship( "Venue", primaryjoin=func.instr( remote(foreign(name)), name + "/" ).as_comparison(1, 2) == 1, viewonly=True, order_by=name )
Выше, класс «Venue» может загружать объекты потомков «Venue», определяя, содержится ли имя родительского Venue в начале имени гипотетического значения потомка, например, «parent1» будет соответствовать «parent1/child1», но не «parent2/child1».
Возможные варианты использования включают пример «материализованного пути», приведенный выше, а также использование специальных функций SQL, таких как геометрические функции, для создания условий объединения.
- Параметры:
left_index – целочисленный 1-индекс аргумента функции, который служит «левой» частью выражения.
right_index – целочисленный 1-индекс аргумента функции, который служит «правой» частью выражения.
Добавлено в версии 1.3.
См.также
Пользовательские операторы на основе функций SQL - пример использования в рамках ORM
-
attribute
sqlalchemy.sql.functions.FunctionElement.
c¶ синоним для
FunctionElement.columns
.
-
attribute
sqlalchemy.sql.functions.FunctionElement.
clauses¶ Возвращает базовый
ClauseList
, который содержит аргументы для данногоFunctionElement
.
-
method
sqlalchemy.sql.functions.FunctionElement.
column_valued(name=None, joins_implicitly=False)¶ Верните это
FunctionElement
как выражение столбца, которое выбирает из себя как предложение FROM.Например:
>>> from sqlalchemy import select, func >>> gs = func.generate_series(1, 5, -1).column_valued() >>> print(select(gs)) {printsql}SELECT anon_1 FROM generate_series(:generate_series_1, :generate_series_2, :generate_series_3) AS anon_1
Это сокращение означает:
gs = func.generate_series(1, 5, -1).alias().column
- Параметры:
name – необязательное имя для присвоения генерируемому псевдониму. Если оно опущено, используется уникальное анонимизирующее имя.
joins_implicitly – когда True, часть «таблицы» функции, оцениваемой по столбцу, может быть членом предложения FROM без явного JOIN с другими таблицами в SQL-запросе, и предупреждение о «картезианском произведении» не будет выдано. Может быть полезно для таких SQL-функций, как
func.json_array_elements()
. … versionadded:: 1.4.46
-
attribute
sqlalchemy.sql.functions.FunctionElement.
columns¶ Набор столбцов, экспортируемых этим
FunctionElement
.Это коллекция заполнителей, которая позволяет поместить функцию в предложение FROM оператора:
>>> from sqlalchemy import column, select, func >>> stmt = select(column('x'), column('y')).select_from(func.myfunction()) >>> print(stmt) {printsql}SELECT x, y FROM myfunction()
Приведенная выше форма - это унаследованная функция, которая теперь заменена полностью функциональным методом
FunctionElement.table_valued()
; подробности см. в этом методе.См.также
FunctionElement.table_valued()
- генерирует табличные функциональные выражения SQL.
-
attribute
sqlalchemy.sql.functions.FunctionElement.
entity_namespace¶ переопределяет FromClause.entity_namespace, поскольку функции обычно являются выражениями столбцов, а не FromClauses.
-
attribute
sqlalchemy.sql.functions.FunctionElement.
exported_columns¶
-
method
sqlalchemy.sql.functions.FunctionElement.
filter(*criterion)¶ Создайте предложение FILTER для этой функции.
Используется против агрегатных и оконных функций, для бэкендов баз данных, поддерживающих условие «FILTER».
Выражение:
func.count(1).filter(True)
является сокращением для:
from sqlalchemy import funcfilter funcfilter(func.count(1), True)
-
method
sqlalchemy.sql.functions.FunctionElement.
over(partition_by=None, order_by=None, rows=None, range_=None)¶ Создайте предложение OVER для этой функции.
Используется против агрегатных или так называемых «оконных» функций, для бэкендов баз данных, поддерживающих оконные функции.
Выражение:
func.row_number().over(order_by='x')
является сокращением для:
from sqlalchemy import over over(func.row_number(), order_by='x')
Полное описание см. в разделе
over()
.
-
method
sqlalchemy.sql.functions.FunctionElement.
scalar_table_valued(name, type_=None)¶ Возвращает выражение столбца, которое находится против данного
FunctionElement
в виде скалярного таблично-значного выражения.Возвращаемое выражение аналогично тому, которое возвращает один столбец, доступ к которому осуществляется через конструкцию
FunctionElement.table_valued()
, за исключением того, что не генерируется предложение FROM; функция отображается аналогично скалярному подзапросу.Например:
>>> from sqlalchemy import func, select >>> fn = func.jsonb_each("{'k', 'v'}").scalar_table_valued("key") >>> print(select(fn)) {printsql}SELECT (jsonb_each(:jsonb_each_1)).key
Добавлено в версии 1.4.0b2.
-
method
sqlalchemy.sql.functions.FunctionElement.
select() Select ¶ Произведите конструкцию
select()
против этойFunctionElement
.Это сокращение означает:
s = select(function_element)
-
method
sqlalchemy.sql.functions.FunctionElement.
self_group(against=None)¶ Примените «группировку» к этому
ClauseElement
.Этот метод переопределяется подклассами для возврата конструкции «группировки», т.е. круглой скобки. В частности, она используется «бинарными» выражениями для обеспечения группировки вокруг себя при помещении в более крупное выражение, а также конструкциями
select()
при помещении в предложение FROM другогоselect()
. (Обратите внимание, что подзапросы обычно следует создавать с помощью методаSelect.alias()
, поскольку многие платформы требуют, чтобы вложенные операторы SELECT были именованными).Поскольку выражения составляются вместе, применение
self_group()
происходит автоматически - код конечного пользователя никогда не должен использовать этот метод напрямую. Обратите внимание, что в конструкциях клаузул SQLAlchemy учитывается приоритет операторов - поэтому скобки могут не понадобиться, например, в выраженииx OR (y AND z)
- AND имеет приоритет над OR.Базовый метод
self_group()
ClauseElement
просто возвращает self.
-
method
sqlalchemy.sql.functions.FunctionElement.
table_valued(*expr, **kw)¶ Возвращает представление
TableValuedAlias
данногоFunctionElement
с добавлением выражений с табличными значениями.например:
>>> fn = ( ... func.generate_series(1, 5). ... table_valued("value", "start", "stop", "step") ... ) >>> print(select(fn)) {printsql}SELECT anon_1.value, anon_1.start, anon_1.stop, anon_1.step FROM generate_series(:generate_series_1, :generate_series_2) AS anon_1{stop} >>> print(select(fn.c.value, fn.c.stop).where(fn.c.value > 2)) {printsql}SELECT anon_1.value, anon_1.stop FROM generate_series(:generate_series_1, :generate_series_2) AS anon_1 WHERE anon_1.value > :value_1{stop}
Выражение WITH ORDINALITY может быть создано путем передачи аргумента ключевого слова «with_ordinality»:
>>> fn = func.generate_series(4, 1, -1).table_valued("gen", with_ordinality="ordinality") >>> print(select(fn)) {printsql}SELECT anon_1.gen, anon_1.ordinality FROM generate_series(:generate_series_1, :generate_series_2, :generate_series_3) WITH ORDINALITY AS anon_1
- Параметры:
*expr – Серия строковых имен столбцов, которые будут добавлены в коллекцию
.c
результирующей конструкцииTableValuedAlias
в качестве столбцов. Также могут быть использованы объектыcolumn()
с типами данных или без них.name – необязательное имя для присвоения генерируемому псевдониму. Если оно опущено, используется уникальное анонимизирующее имя.
with_ordinality – строковое имя, при наличии которого к псевдониму будет добавлен пункт
WITH ORDINALITY
, а данное строковое имя будет добавлено в качестве столбца в коллекцию .c результирующегоTableValuedAlias
.joins_implicitly – при значении True табличная функция может быть использована в предложении FROM без явного JOIN с другими таблицами в SQL-запросе, и предупреждение о «картезианском произведении» не будет выдано. Может быть полезно для таких SQL-функций, как
func.json_each()
. … versionadded:: 1.4.33
Добавлено в версии 1.4.0b2.
См.также
Функции с табличными значениями - в Унифицированный учебник по SQLAlchemy
Функции с табличными значениями - в документации PostgreSQL
FunctionElement.scalar_table_valued()
- вариантFunctionElement.table_valued()
, который передает полное табличное ценностное выражение как скалярное выражение столбцаFunctionElement.column_valued()
TableValuedAlias.render_derived()
- отображает псевдоним с использованием производного столбца, например,AS name(col1, col2, ...)
.
-
method
sqlalchemy.sql.functions.FunctionElement.
within_group(*order_by)¶ Создайте предложение WITHIN GROUP (ORDER BY expr) для этой функции.
Используется против так называемых «упорядоченных агрегатов множеств» и «гипотетических агрегатов множеств», включая функции
percentile_cont
,rank
,dense_rank
и т.д.Полное описание см. в разделе
within_group()
.
-
method
sqlalchemy.sql.functions.FunctionElement.
within_group_type(within_group)¶ Для типов, которые определяют свой тип возврата как основанный на критериях внутри выражения WITHIN GROUP (ORDER BY), вызываемого конструкцией
WithinGroup
.По умолчанию возвращает None, в этом случае используется обычная функция
.type
.
-
method
- class sqlalchemy.sql.functions.GenericFunction¶
Определите «общую» функцию.
Родовая функция - это предварительно созданный класс
Function
, который инстанцируется автоматически при вызове по имени из атрибутаfunc
. Обратите внимание, что при вызове любого имени изfunc
происходит автоматическое создание нового экземпляраFunction
, заданного этим именем. Основное применение для определения классаGenericFunction
заключается в том, чтобы функция с определенным именем могла иметь фиксированный тип возврата. Он также может включать пользовательские схемы разбора аргументов, а также дополнительные методы.Подклассы
GenericFunction
автоматически регистрируются под именем класса. Например, определяемая пользователем функцияas_utc()
будет доступна сразу:from sqlalchemy.sql.functions import GenericFunction from sqlalchemy.types import DateTime class as_utc(GenericFunction): type = DateTime() inherit_cache = True print(select(func.as_utc()))
Определяемые пользователем общие функции могут быть организованы в пакеты путем указания атрибута «package» при определении
GenericFunction
. Сторонние библиотеки, содержащие множество функций, могут захотеть использовать это, чтобы избежать конфликтов имен с другими системами. Например, если бы наша функцияas_utc()
была частью пакета «time»:class as_utc(GenericFunction): type = DateTime() package = "time" inherit_cache = True
Приведенная выше функция будет доступна из
func
, используя имя пакетаtime
:print(select(func.time.as_utc()))
Последним вариантом является разрешение доступа к функции по одному имени в
func
, но для отображения в виде другого имени. Атрибутidentifier
будет переопределять имя, используемое для доступа к функции, загруженной изfunc
, но сохранит использованиеname
в качестве отрисованного имени:class GeoBuffer(GenericFunction): type = Geometry() package = "geo" name = "ST_Buffer" identifier = "buffer" inherit_cache = True
Приведенная выше функция будет выглядеть следующим образом:
>>> print(func.geo.buffer()) {printsql}ST_Buffer()
Имя будет отображаться как есть, но без кавычек, если только имя не содержит специальных символов, требующих кавычек. Чтобы включить или выключить кавычки для имени, используйте конструкцию
quoted_name
:from sqlalchemy.sql import quoted_name class GeoBuffer(GenericFunction): type = Geometry() package = "geo" name = quoted_name("ST_Buffer", True) identifier = "buffer" inherit_cache = True
Приведенная выше функция будет выглядеть так:
>>> print(func.geo.buffer()) {printsql}"ST_Buffer"()
Параметры типа для этого класса могут быть переданы в виде generic type и должны соответствовать типу, указанному в
Result
. Например:class as_utc(GenericFunction[datetime.datetime]): type = DateTime() inherit_cache = True
Выше указано, что следующее выражение возвращает объект
datetime
:connection.scalar(select(func.as_utc()))
Добавлено в версии 1.3.13: Конструкция
quoted_name
теперь распознается для кавычек при использовании с атрибутом «name» объекта, так что кавычки могут быть принудительно включены или выключены для имени функции.Классная подпись
класс
sqlalchemy.sql.functions.GenericFunction
(sqlalchemy.sql.functions.Function
)
- function sqlalchemy.sql.functions.register_function(identifier, fn, package='_default')¶
Привязать вызываемую функцию к определенному имени функции.
Обычно он вызывается GenericFunction, но также доступен сам по себе, чтобы можно было связать конструкцию, не относящуюся к функции, с аксессором
func
(т.е. CAST, EXTRACT).
Отдельные «известные» функции¶
Это GenericFunction
реализации для выбранного набора общих функций SQL, которые автоматически устанавливают ожидаемый тип возврата для каждой функции. Они вызываются так же, как и любой другой член пространства имен func
:
select(func.count("*")).select_from(some_table)
Обратите внимание, что любое имя, не известное func
, генерирует имя функции как есть - нет никаких ограничений на то, какие SQL функции могут быть вызваны, известные или неизвестные SQLAlchemy, встроенные или определенные пользователем. В данном разделе описаны только те функции, для которых SQLAlchemy уже знает, какие типы аргументов и возвратов используются.
Object Name | Description |
---|---|
Поддержка функции ARRAY_AGG. |
|
SQL-функция CHAR_LENGTH(). |
|
Функция SQL CONCAT(), которая объединяет строки. |
|
Агрегатная функция ANSI COUNT. При отсутствии аргументов выдает COUNT *. |
|
Реализуйте операцию группировки |
|
Реализуйте агрегатную функцию гипотетического множества |
|
SQL-функция CURRENT_DATE(). |
|
SQL-функция CURRENT_TIME(). |
|
SQL-функция CURRENT_TIMESTAMP(). |
|
SQL-функция CURRENT_USER(). |
|
Реализуйте агрегатную функцию гипотетического множества |
|
Реализуйте операцию группировки |
|
SQL-функция localtime(). |
|
SQL-функция localtimestamp(). |
|
Агрегатная функция SQL MAX(). |
|
Агрегатная функция SQL MIN(). |
|
Реализуйте функцию агрегации упорядоченных множеств |
|
Представляет «следующее значение», учитывая |
|
Функция SQL now() для определения времени. |
|
Реализуйте агрегатную функцию гипотетического множества |
|
Реализуйте функцию агрегации упорядоченных множеств |
|
Реализуйте функцию агрегации упорядоченных множеств |
|
SQL-функция RANDOM(). |
|
Реализуйте агрегатную функцию гипотетического множества |
|
Реализуйте операцию группировки |
|
SQL-функция SESSION_USER(). |
|
Агрегатная функция SQL SUM(). |
|
SQL-функция SYSDATE(). |
|
SQL-функция USER(). |
- class sqlalchemy.sql.functions.array_agg¶
Поддержка функции ARRAY_AGG.
Конструкция
func.array_agg(expr)
возвращает выражение типаARRAY
.например:
stmt = select(func.array_agg(table.c.values)[2:5])
См.также
array_agg()
- специфическая для PostgreSQL версия, возвращающаяARRAY
, в которую добавлены специфические для PG операторы.Классная подпись
класс
sqlalchemy.sql.functions.array_agg
(sqlalchemy.sql.functions.GenericFunction
)
- class sqlalchemy.sql.functions.char_length¶
SQL-функция CHAR_LENGTH().
Классная подпись
класс
sqlalchemy.sql.functions.char_length
(sqlalchemy.sql.functions.GenericFunction
)
- class sqlalchemy.sql.functions.coalesce¶
Классная подпись
класс
sqlalchemy.sql.functions.coalesce
(sqlalchemy.sql.functions.ReturnTypeFromArgs
)
- class sqlalchemy.sql.functions.concat¶
Функция SQL CONCAT(), которая объединяет строки.
Например:
>>> print(select(func.concat('a', 'b'))) {printsql}SELECT concat(:concat_2, :concat_3) AS concat_1
Конкатенация строк в SQLAlchemy чаще всего доступна с помощью оператора Python
+
со строковыми типами данных, который выводит специфический для бэкенда оператор конкатенации, такой как :>>> print(select(literal("a") + "b")) {printsql}SELECT :param_1 || :param_2 AS anon_1
Классная подпись
класс
sqlalchemy.sql.functions.concat
(sqlalchemy.sql.functions.GenericFunction
)
- class sqlalchemy.sql.functions.count¶
Агрегатная функция ANSI COUNT. При отсутствии аргументов выдает COUNT *.
Например:
from sqlalchemy import func from sqlalchemy import select from sqlalchemy import table, column my_table = table('some_table', column('id')) stmt = select(func.count()).select_from(my_table)
Выполнение
stmt
приведет к появлению:SELECT count(*) AS count_1 FROM some_table
Классная подпись
класс
sqlalchemy.sql.functions.count
(sqlalchemy.sql.functions.GenericFunction
)
- class sqlalchemy.sql.functions.cube¶
Реализуйте операцию группировки
CUBE
.Эта функция используется как часть GROUP BY оператора, например,
Select.group_by()
:stmt = select( func.sum(table.c.value), table.c.col_1, table.c.col_2 ).group_by(func.cube(table.c.col_1, table.c.col_2))
Добавлено в версии 1.2.
Классная подпись
класс
sqlalchemy.sql.functions.cube
(sqlalchemy.sql.functions.GenericFunction
)
- class sqlalchemy.sql.functions.cume_dist¶
Реализуйте агрегатную функцию гипотетического множества
cume_dist
.Эта функция должна использоваться с модификатором
FunctionElement.within_group()
, чтобы предоставить выражение сортировки для работы.Тип возврата этой функции -
Numeric
.Классная подпись
класс
sqlalchemy.sql.functions.cume_dist
(sqlalchemy.sql.functions.GenericFunction
)
- class sqlalchemy.sql.functions.current_date¶
SQL-функция CURRENT_DATE().
Классная подпись
класс
sqlalchemy.sql.functions.current_date
(sqlalchemy.sql.functions.AnsiFunction
)
- class sqlalchemy.sql.functions.current_time¶
SQL-функция CURRENT_TIME().
Классная подпись
класс
sqlalchemy.sql.functions.current_time
(sqlalchemy.sql.functions.AnsiFunction
)
- class sqlalchemy.sql.functions.current_timestamp¶
SQL-функция CURRENT_TIMESTAMP().
Классная подпись
класс
sqlalchemy.sql.functions.current_timestamp
(sqlalchemy.sql.functions.AnsiFunction
)
- class sqlalchemy.sql.functions.current_user¶
SQL-функция CURRENT_USER().
Классная подпись
класс
sqlalchemy.sql.functions.current_user
(sqlalchemy.sql.functions.AnsiFunction
)
- class sqlalchemy.sql.functions.dense_rank¶
Реализуйте агрегатную функцию гипотетического множества
dense_rank
.Эта функция должна использоваться с модификатором
FunctionElement.within_group()
, чтобы предоставить выражение сортировки для работы.Тип возврата этой функции -
Integer
.Классная подпись
класс
sqlalchemy.sql.functions.dense_rank
(sqlalchemy.sql.functions.GenericFunction
)
- class sqlalchemy.sql.functions.grouping_sets¶
Реализуйте операцию группировки
GROUPING SETS
.Эта функция используется как часть GROUP BY оператора, например,
Select.group_by()
:stmt = select( func.sum(table.c.value), table.c.col_1, table.c.col_2 ).group_by(func.grouping_sets(table.c.col_1, table.c.col_2))
Чтобы сгруппировать по нескольким наборам, используйте конструкцию
tuple_()
:from sqlalchemy import tuple_ stmt = select( func.sum(table.c.value), table.c.col_1, table.c.col_2, table.c.col_3 ).group_by( func.grouping_sets( tuple_(table.c.col_1, table.c.col_2), tuple_(table.c.value, table.c.col_3), ) )
Добавлено в версии 1.2.
Классная подпись
класс
sqlalchemy.sql.functions.grouping_sets
(sqlalchemy.sql.functions.GenericFunction
)
- class sqlalchemy.sql.functions.localtime¶
SQL-функция localtime().
Классная подпись
класс
sqlalchemy.sql.functions.localtime
(sqlalchemy.sql.functions.AnsiFunction
)
- class sqlalchemy.sql.functions.localtimestamp¶
SQL-функция localtimestamp().
Классная подпись
класс
sqlalchemy.sql.functions.localtimestamp
(sqlalchemy.sql.functions.AnsiFunction
)
- class sqlalchemy.sql.functions.max¶
Агрегатная функция SQL MAX().
Классная подпись
класс
sqlalchemy.sql.functions.max
(sqlalchemy.sql.functions.ReturnTypeFromArgs
)
- class sqlalchemy.sql.functions.min¶
Агрегатная функция SQL MIN().
Классная подпись
класс
sqlalchemy.sql.functions.min
(sqlalchemy.sql.functions.ReturnTypeFromArgs
)
- class sqlalchemy.sql.functions.mode¶
Реализуйте функцию агрегации упорядоченных множеств
mode
.Эта функция должна использоваться с модификатором
FunctionElement.within_group()
, чтобы предоставить выражение сортировки для работы.Тип возврата этой функции такой же, как и выражение сортировки.
Классная подпись
класс
sqlalchemy.sql.functions.mode
(sqlalchemy.sql.functions.OrderedSetAgg
)
- class sqlalchemy.sql.functions.next_value¶
Представляет «следующее значение», учитывая
Sequence
в качестве единственного аргумента.Компилируется в соответствующую функцию на каждом бэкенде, либо выдает ошибку NotImplementedError, если используется на бэкенде, который не обеспечивает поддержку последовательностей.
Классная подпись
класс
sqlalchemy.sql.functions.next_value
(sqlalchemy.sql.functions.GenericFunction
)
- class sqlalchemy.sql.functions.now¶
Функция SQL now() для определения времени.
Диалекты SQLAlchemy обычно отображают эту конкретную функцию специфическим для бэкенда способом, например, отображая ее как
CURRENT_TIMESTAMP
.Классная подпись
класс
sqlalchemy.sql.functions.now
(sqlalchemy.sql.functions.GenericFunction
)
- class sqlalchemy.sql.functions.percent_rank¶
Реализуйте агрегатную функцию гипотетического множества
percent_rank
.Эта функция должна использоваться с модификатором
FunctionElement.within_group()
, чтобы предоставить выражение сортировки для работы.Тип возврата этой функции -
Numeric
.Классная подпись
класс
sqlalchemy.sql.functions.percent_rank
(sqlalchemy.sql.functions.GenericFunction
)
- class sqlalchemy.sql.functions.percentile_cont¶
Реализуйте функцию агрегации упорядоченных множеств
percentile_cont
.Эта функция должна использоваться с модификатором
FunctionElement.within_group()
, чтобы предоставить выражение сортировки для работы.Возвращаемый тип этой функции такой же, как и выражение сортировки, или, если аргументы являются массивом,
ARRAY
типа выражения сортировки.Классная подпись
класс
sqlalchemy.sql.functions.percentile_cont
(sqlalchemy.sql.functions.OrderedSetAgg
)
- class sqlalchemy.sql.functions.percentile_disc¶
Реализуйте функцию агрегации упорядоченных множеств
percentile_disc
.Эта функция должна использоваться с модификатором
FunctionElement.within_group()
, чтобы предоставить выражение сортировки для работы.Возвращаемый тип этой функции такой же, как и выражение сортировки, или, если аргументы являются массивом,
ARRAY
типа выражения сортировки.Классная подпись
класс
sqlalchemy.sql.functions.percentile_disc
(sqlalchemy.sql.functions.OrderedSetAgg
)
- class sqlalchemy.sql.functions.random¶
SQL-функция RANDOM().
Классная подпись
класс
sqlalchemy.sql.functions.random
(sqlalchemy.sql.functions.GenericFunction
)
- class sqlalchemy.sql.functions.rank¶
Реализуйте агрегатную функцию гипотетического множества
rank
.Эта функция должна использоваться с модификатором
FunctionElement.within_group()
, чтобы предоставить выражение сортировки для работы.Тип возврата этой функции -
Integer
.Классная подпись
класс
sqlalchemy.sql.functions.rank
(sqlalchemy.sql.functions.GenericFunction
)
- class sqlalchemy.sql.functions.rollup¶
Реализуйте операцию группировки
ROLLUP
.Эта функция используется как часть GROUP BY оператора, например,
Select.group_by()
:stmt = select( func.sum(table.c.value), table.c.col_1, table.c.col_2 ).group_by(func.rollup(table.c.col_1, table.c.col_2))
Добавлено в версии 1.2.
Классная подпись
класс
sqlalchemy.sql.functions.rollup
(sqlalchemy.sql.functions.GenericFunction
)
- class sqlalchemy.sql.functions.session_user¶
SQL-функция SESSION_USER().
Классная подпись
класс
sqlalchemy.sql.functions.session_user
(sqlalchemy.sql.functions.AnsiFunction
)
- class sqlalchemy.sql.functions.sum¶
Агрегатная функция SQL SUM().
Классная подпись
класс
sqlalchemy.sql.functions.sum
(sqlalchemy.sql.functions.ReturnTypeFromArgs
)
- class sqlalchemy.sql.functions.sysdate¶
SQL-функция SYSDATE().
Классная подпись
класс
sqlalchemy.sql.functions.sysdate
(sqlalchemy.sql.functions.AnsiFunction
)
- class sqlalchemy.sql.functions.user¶
SQL-функция USER().
Классная подпись
класс
sqlalchemy.sql.functions.user
(sqlalchemy.sql.functions.AnsiFunction
)