Функция func.length
Функция func.length возвращает длину строки.
В качестве параметра функция принимает колонку
или любое другое выражение SQLAlchemy, которое
возвращает строку. Функция транслируется в
SQL-функцию length и возвращает целое число.
Синтаксис
func.length(expression)
Пример
Давайте посчитаем длину строки в простом SQL-запросе без таблицы:
from sqlalchemy import create_engine, func, select
engine = create_engine('sqlite:///:memory:')
stmt = select(func.length('article'))
with engine.connect() as conn:
res = conn.execute(stmt).scalar()
print(res)
Результат выполнения кода:
7
Пример
Давайте создадим таблицу articles и
посчитаем длину заголовка каждой статьи:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String
from sqlalchemy import func, select
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('text', String),
)
metadata.create_all(engine)
with engine.begin() as conn:
conn.execute(articles.insert(), [
{'id': 1, 'title': 'article', 'text': 'sql'},
{'id': 2, 'title': 'user', 'text': 'python'},
])
stmt = select(articles.c.title, func.length(articles.c.title))
res = conn.execute(stmt).all()
print(res)
Результат выполнения кода:
[('article', 7), ('user', 4)]
Пример
Давайте отфильтруем статьи, у которых длина заголовка больше пяти символов:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String
from sqlalchemy import func, select
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('text', String),
)
metadata.create_all(engine)
with engine.begin() as conn:
conn.execute(articles.insert(), [
{'id': 1, 'title': 'article', 'text': 'sql'},
{'id': 2, 'title': 'user', 'text': 'python'},
])
stmt = select(articles.c.title).where(func.length(articles.c.title) > 5)
res = conn.execute(stmt).scalars().all()
print(res)
Результат выполнения кода:
['article']
Итоговый SQL запрос:
SELECT articles.title
FROM articles
WHERE length(articles.title) > 5
Пример
Давайте отсортируем статьи по убыванию длины заголовка:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String
from sqlalchemy import func, select, desc
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('text', String),
)
metadata.create_all(engine)
with engine.begin() as conn:
conn.execute(articles.insert(), [
{'id': 1, 'title': 'article', 'text': 'sql'},
{'id': 2, 'title': 'user', 'text': 'python'},
])
stmt = select(articles.c.title).order_by(desc(func.length(articles.c.title)))
res = conn.execute(stmt).scalars().all()
print(res)
Результат выполнения кода:
['article', 'user']
Смотрите также
-
функцию
func,
которая создает произвольную SQL-функцию -
функцию
func.lower,
которая переводит строку в нижний регистр -
функцию
func.upper,
которая переводит строку в верхний регистр -
функцию
func.concat,
которая объединяет строки в одну