Пространство имён func
Пространство имён func служит для вызова
SQL-функций базы данных прямо из Python-кода.
Любой атрибут, к которому обращаются через
func, автоматически превращается в
SQL-функцию с тем же именем. Например,
func.count преобразуется в SQL-функцию
count, а func.lower - в
lower. Аргументами такой функции
выступают колонки, литералы и другие выражения
SQLAlchemy.
Синтаксис
func.name(argument, ...)
Пример
Давайте вызовем SQL-функцию upper для
преобразования строки в верхний регистр:
from sqlalchemy import create_engine, select, func
engine = create_engine('sqlite:///:memory:')
with engine.connect() as conn:
res = conn.execute(select(func.upper('article')))
print(res.scalar())
Результат выполнения кода:
"ARTICLE"
Итоговый SQL запрос:
SELECT upper('article') AS upper_1
Пример
Давайте создадим таблицу articles и применим
агрегатную функцию func.count для подсчета
числа строк:
from sqlalchemy import create_engine, select, func, table, column, insert
engine = create_engine('sqlite:///:memory:')
articles = table(
'articles',
column('id'),
column('title'),
)
with engine.connect() as conn:
conn.execute(insert(articles).values([
{'id': 1, 'title': 'article'},
{'id': 2, 'title': 'user'},
]))
res = conn.execute(select(func.count(articles.c.id)))
print(res.scalar())
Результат выполнения кода:
2
Итоговый SQL запрос:
SELECT count(articles.id) AS count_1
FROM articles
Пример
Давайте используем функцию func.length для
получения длины названия статьи:
from sqlalchemy import create_engine, select, func, table, column, insert
engine = create_engine('sqlite:///:memory:')
articles = table(
'articles',
column('id'),
column('title'),
)
with engine.connect() as conn:
conn.execute(insert(articles).values([
{'id': 1, 'title': 'article'},
]))
res = conn.execute(
select(func.length(articles.c.title))
)
print(res.scalar())
Результат выполнения кода:
7
Итоговый SQL запрос:
SELECT length(articles.title) AS length_1
FROM articles
Пример
Давайте присвоим псевдоним результату функции через
метод label:
from sqlalchemy import create_engine, select, func
engine = create_engine('sqlite:///:memory:')
with engine.connect() as conn:
res = conn.execute(
select(func.lower('ARTICLE').label('low'))
)
print(res.scalar())
Результат выполнения кода:
"article"
Итоговый SQL запрос:
SELECT lower('ARTICLE') AS low
Смотрите также
-
функцию
func.count,
которая подсчитывает число строк -
функцию
func.sum,
которая суммирует значения колонки -
функцию
func.coalesce,
которая возвращает первое не NULL значение -
функцию
func.lower,
которая переводит строку в нижний регистр