Функция values создает конструкцию VALUES,
которая представляет собой набор строк со значениями
для использования в SQL-запросах. Чаще всего
применяется совместно с select для создания
производных таблиц, а также в операциях insert
и update. Первым параметром передаются
именованные колонки, последующими - строки значений.
Синтаксис
values(column1, column2, ..., name="alias")
Пример
Давайте создадим простую конструкцию VALUES
с двумя колонками и двумя строками:
from sqlalchemy import values, column
stmt = values(
column("id"),
column("title"),
name="articles"
).data([
(1, "article 1"),
(2, "article 2"),
])
print(stmt)
Результат выполнения кода:
"VALUES (1, 'article 1'), (2, 'article 2')"
Пример
Давайте используем конструкцию VALUES в качестве
производной таблицы в запросе SELECT:
<+python+>
from sqlalchemy import values, column, select
stmt = values(
column("id"),
column("title"),
name="articles"
).data([
(1, "article 1"),
(2, "article 2"),
])
query = select(stmt.c.id, stmt.c.title)
print(query)
<-python+>
Итоговый SQL запрос:
SELECT articles.id, articles.title
FROM (VALUES (1, 'article 1'), (2, 'article 2')) AS articles (id, title)
Пример
Давайте выполним запрос к базе данных
SQLite в памяти и получим результат:
<+python+>
from sqlalchemy import create_engine, values, column, select
engine = create_engine("sqlite:///:memory:")
stmt = values(
column("id"),
column("title"),
name="articles"
).data([
(1, "article 1"),
(2, "article 2"),
(3, "article 3"),
])
query = select(stmt.c.id, stmt.c.title)
with engine.connect() as conn:
res = conn.execute(query).fetchall()
print(res)
<-python+>
Результат выполнения кода:
<+python+>
[(1, 'article 1'), (2, 'article 2'), (3, 'article 3')]
<-python+>
Пример
Давайте используем конструкцию VALUES с фильтрацией
через where:
<+python+>
from sqlalchemy import create_engine, values, column, select
engine = create_engine("sqlite:///:memory:")
stmt = values(
column("id"),
column("title"),
column("status"),
name="articles"
).data([
(1, "article 1", "published"),
(2, "article 2", "draft"),
(3, "article 3", "published"),
])
query = select(stmt.c.id, stmt.c.title).where(stmt.c.status == "published")
with engine.connect() as conn:
res = conn.execute(query).fetchall()
print(res)
<-python+>
Результат выполнения кода:
<+python+>
[(1, 'article 1'), (3, 'article 3')]
<-python+>
Смотрите также
-
функцию
select,
которая создает SELECT-запрос
-
функцию
insert,
которая создает INSERT-запрос
-
функцию
update,
которая создает UPDATE-запрос
-
функцию
union,
которая объединяет результаты запросов