Функция cast
Функция cast приводит значение к заданному
типу данных. Первым параметром функция принимает
выражение или колонку, которую нужно преобразовать,
а вторым - целевой тип данных. Это полезно, когда
нужно сравнить значения разных типов или явно указать
СУБД, как интерпретировать данные.
Синтаксис
cast(expression, type_)
Пример
Давайте приведем строку к целочисленному типу и выведем результат:
from sqlalchemy import cast, Integer, String, select
from sqlalchemy import create_engine, text
engine = create_engine('sqlite:///:memory:')
with engine.connect() as conn:
stmt = select(cast('123', Integer))
res = conn.execute(stmt).scalar()
print(res)
Результат выполнения кода:
123
Пример
Давайте приведем число к строковому типу:
from sqlalchemy import cast, String, Integer, select
from sqlalchemy import create_engine
engine = create_engine('sqlite:///:memory:')
with engine.connect() as conn:
stmt = select(cast(456, String))
res = conn.execute(stmt).scalar()
print(res)
Результат выполнения кода:
"456"
Пример
Давайте создадим таблицу articles и приведем значение колонки num к строковому типу:
from sqlalchemy import create_engine, cast, String, select
from sqlalchemy import Integer, Column, MetaData, Table, insert
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('num', Integer)
)
metadata.create_all(engine)
with engine.connect() as conn:
conn.execute(insert(articles), [
{'title': 'article 1', 'num': 10},
{'title': 'article 2', 'num': 20}
])
stmt = select(articles.c.title, cast(articles.c.num, String))
res = conn.execute(stmt).fetchall()
for row in res:
print(row)
Результат выполнения кода:
('article 1', '10')
('article 2', '20')
Пример
Давайте используем cast вместе с функцией func.length для получения длины строки в виде числа:
from sqlalchemy import create_engine, cast, Integer, select, func
engine = create_engine('sqlite:///:memory:')
with engine.connect() as conn:
stmt = select(cast(func.length('article'), Integer))
res = conn.execute(stmt).scalar()
print(res)
Результат выполнения кода:
7
Смотрите также
-
функцию
try_cast,
которая пытается привести тип и возвращает NULL при ошибке -
функцию
type_coerce,
которая указывает тип без генерации CAST в SQL -
функцию
extract,
которая извлекает часть даты или времени -
функцию
literal,
которая создает литеральное значение для запроса