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

Метод exec_driver_sql

Метод exec_driver_sql класса Connection выполняет SQL-запрос напрямую через драйвер базы данных. В отличие от метода execute, который принимает конструкции SQLAlchemy и компилирует их в диалект конкретной СУБД, метод exec_driver_sql передаёт строку запроса драйверу как есть. Первым параметром метод принимает строку SQL или объект, поддерживаемый драйвером. Вторым необязательным параметром передаётся словарь или кортеж параметров для подстановки в запрос. Метод возвращает объект CursorResult с результатами выполнения.

Синтаксис

Connection.exec_driver_sql(statement, parameters=None, execution_options=None)

Пример

Давайте выполним простой SQL-запрос через exec_driver_sql и выведем результат:

from sqlalchemy import create_engine engine = create_engine('sqlite:///:memory:') with engine.connect() as conn: res = conn.exec_driver_sql('SELECT 1 AS num') print(res.fetchall())

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

[(1,)]

Пример

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

from sqlalchemy import create_engine engine = create_engine('sqlite:///:memory:') with engine.connect() as conn: conn.exec_driver_sql( 'CREATE TABLE articles (' 'id INTEGER PRIMARY KEY, ' 'title VARCHAR, ' 'status VARCHAR)' ) conn.exec_driver_sql( 'INSERT INTO articles (title, status) VALUES (?, ?)', ('article', 'draft') ) res = conn.exec_driver_sql( 'SELECT id, title, status FROM articles' ) print(res.fetchall())

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

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

Пример

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

from sqlalchemy import create_engine engine = create_engine('sqlite:///:memory:') with engine.connect() as conn: conn.exec_driver_sql( 'CREATE TABLE articles (' 'id INTEGER PRIMARY KEY, ' 'title VARCHAR, ' 'num INTEGER)' ) conn.exec_driver_sql( 'INSERT INTO articles (title, num) VALUES (:title, :num)', {'title': 'article', 'num': 10} ) res = conn.exec_driver_sql( 'SELECT title, num FROM articles WHERE num > :min_num', {'min_num': 5} ) print(res.fetchall())

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

[('article', 10)]

Пример

Давайте выполним запрос с текстом, содержащим спецсимволы, и передадим его драйверу без обработки компилятором SQLAlchemy:

from sqlalchemy import create_engine engine = create_engine('sqlite:///:memory:') with engine.connect() as conn: conn.exec_driver_sql( 'CREATE TABLE articles (' 'id INTEGER PRIMARY KEY, ' 'text VARCHAR)' ) conn.exec_driver_sql( "INSERT INTO articles (text) VALUES ('100% sql')" ) res = conn.exec_driver_sql( "SELECT text FROM articles WHERE text LIKE '%100%'" ) print(res.fetchall())

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

[('100% sql',)]

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

  • метод execute,
    который выполняет конструкции SQLAlchemy с компиляцией
  • класс Connection,
    который представляет соединение с базой данных
  • метод scalar,
    который возвращает первое значение результата
  • метод commit,
    который фиксирует текущую транзакцию
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить