РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
439 of 711 menu

Функция bindparam

Функция bindparam создает объект именованного параметра, который подставляется в SQL-выражение. Первым параметром функция принимает имя параметра. Вторым необязательным параметром передается значение. Также можно указать тип через параметр type_ и дополнительные опции через value и required.

Синтаксис

bindparam(key, [value], [type_], [unique])

Пример

Давайте создадим простой параметр и подставим его в SQL-выражение:

from sqlalchemy import bindparam, text stmt = text('SELECT :name AS result').bindparams( bindparam('name', value='article') ) print(stmt)

Результат выполнения кода:

"SELECT :name AS result"

Пример

Давайте выполним запрос с параметром через соединение с базой данных:

from sqlalchemy import create_engine, bindparam, text engine = create_engine('sqlite:///:memory:') stmt = text('SELECT :title AS result').bindparams( bindparam('title', value='article') ) with engine.connect() as conn: res = conn.execute(stmt) print(res.fetchone())

Результат выполнения кода:

('article',)

Пример

Давайте передадим значение параметра во время выполнения запроса, а не при создании:

from sqlalchemy import create_engine, bindparam, text engine = create_engine('sqlite:///:memory:') stmt = text('SELECT :status AS result').bindparams( bindparam('status') ) with engine.connect() as conn: res = conn.execute(stmt, {'status': 'published'}) print(res.fetchone())

Результат выполнения кода:

('published',)

Пример

Давайте укажем тип параметра через параметр type_:

from sqlalchemy import bindparam, text, Integer stmt = text('SELECT :num AS result').bindparams( bindparam('num', value=10, type_=Integer) ) print(stmt)

Результат выполнения кода:

"SELECT :num AS result"

Пример

Давайте используем bindparam вместе с функцией insert для вставки данных в таблицу:

from sqlalchemy import ( create_engine, MetaData, Table, Column, Integer, String, insert, bindparam ) engine = create_engine('sqlite:///:memory:') metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String), Column('status', String) ) metadata.create_all(engine) stmt = insert(articles).values( title=bindparam('title'), status=bindparam('status') ) with engine.connect() as conn: conn.execute(stmt, [ {'title': 'article 1', 'status': 'published'}, {'title': 'article 2', 'status': 'draft'} ]) conn.commit() res = conn.execute(articles.select()) print(res.fetchall())

Результат выполнения кода:

[(1, 'article 1', 'published'), (2, 'article 2', 'draft')]

Пример

Давайте расширим один параметр на список значений с помощью метода expanding:

from sqlalchemy import create_engine, bindparam, text engine = create_engine('sqlite:///:memory:') stmt = text('SELECT title FROM articles WHERE status IN :statuses').bindparams( bindparam('statuses', expanding=True) ) with engine.connect() as conn: conn.execute(text('CREATE TABLE articles (id INTEGER, title TEXT, status TEXT)')) conn.execute(text("INSERT INTO articles VALUES (1, 'article 1', 'published')")) conn.execute(text("INSERT INTO articles VALUES (2, 'article 2', 'draft')")) conn.execute(text("INSERT INTO articles VALUES (3, 'article 3', 'published')")) conn.commit() res = conn.execute(stmt, {'statuses': ['published', 'draft']}) print(res.fetchall())

Результат выполнения кода:

[('article 1',), ('article 2',), ('article 3',)]

Итоговый SQL запрос:

SELECT title FROM articles WHERE status IN (?, ?)

Смотрите также

  • функцию text,
    которая создает текстовый SQL-запрос
  • функцию literal,
    которая подставляет значение прямо в SQL
  • функцию literal_column,
    которая создает литеральное выражение колонки
  • функцию type_coerce,
    которая приводит выражение к заданному типу
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить