Функция func.concat
Функция func.concat выполняет конкатенацию строк,
то есть соединяет две или более строковых величины в
одну результирующую строку. Функция принимает
произвольное количество аргументов, которые могут быть
как колонками таблицы, так и литеральными значениями.
Порядок аргументов определяет порядок следования
частей в итоговой строке.
Синтаксис
func.concat(expression, *args)
Пример
Давайте объединим две строковые константы с помощью
функции func.concat и выведем результат:
from sqlalchemy import create_engine, select, func
engine = create_engine('sqlite:///:memory:')
stmt = select(func.concat('article', 'user'))
with engine.connect() as conn:
res = conn.execute(stmt).scalar()
print(res)
Результат выполнения кода:
"articleuser"
Пример
Давайте создадим таблицу articles и объединим
значения колонок title и status
через разделитель:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select, func
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('text', String),
Column('status', String),
Column('num', Integer)
)
metadata.create_all(engine)
with engine.begin() as conn:
conn.execute(articles.insert(), [
{'title': 'article', 'text': 'text one', 'status': 'new', 'num': 1},
{'title': 'article', 'text': 'text two', 'status': 'old', 'num': 2}
])
stmt = select(
func.concat(articles.c.title, '-', articles.c.status)
)
with engine.connect() as conn:
res = conn.execute(stmt).scalars().all()
print(res)
Результат выполнения кода:
['article-new', 'article-old']
Пример
Давайте применим функцию func.concat к
нескольким колонкам таблицы и выведем итоговый
SQL-запрос:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select, func
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('text', String),
Column('status', String),
Column('num', Integer)
)
stmt = select(
func.concat(articles.c.title, ' ', articles.c.text, ' [', articles.c.status, ']')
)
print(stmt)
Итоговый SQL запрос:
SELECT concat(articles.title, ?, articles.text, ?, articles.status, ?) AS concat_1
FROM articles
Пример
Давайте объединим строку с числовым значением
колонки num, приведенным к строке:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select, func, cast
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('text', String),
Column('status', String),
Column('num', Integer)
)
metadata.create_all(engine)
with engine.begin() as conn:
conn.execute(articles.insert(), [
{'title': 'article', 'text': 'text one', 'status': 'new', 'num': 1},
{'title': 'article', 'text': 'text two', 'status': 'old', 'num': 2}
])
stmt = select(
func.concat(articles.c.title, ' #', cast(articles.c.num, String))
)
with engine.connect() as conn:
res = conn.execute(stmt).scalars().all()
print(res)
Результат выполнения кода:
['article #1', 'article #2']