Метод raw_connection
Метод raw_connection класса Engine
возвращает «сырое» соединение с базой данных,
то есть объект соединения драйвера СУБД
(например, sqlite3.Connection для SQLite
или psycopg2.connection для PostgreSQL),
а не объект Connection из SQLAlchemy.
Этот метод не принимает обязательных параметров
и возвращает объект соединения, который
необходимо вернуть в пул методом close.
Метод применяется, когда нужно выполнить операцию, недоступную через стандартный интерфейс SQLAlchemy, например, использовать специфичные для драйвера функции или низкоуровневые курсоры.
Синтаксис
raw_connection()
Пример
Давайте получим «сырое» соединение с базой
SQLite и выполним простой SQL-запрос
напрямую через драйвер:
from sqlalchemy import create_engine
engine = create_engine('sqlite:///:memory:')
raw = engine.raw_connection()
cursor = raw.cursor()
cursor.execute('SELECT 1')
res = cursor.fetchone()
print(res)
cursor.close()
raw.close()
Результат выполнения кода:
(1,)
Пример
Давайте с помощью «сырого» соединения создадим
таблицу articles и вставим в неё строку:
from sqlalchemy import create_engine
engine = create_engine('sqlite:///:memory:')
raw = engine.raw_connection()
cursor = raw.cursor()
cursor.execute('CREATE TABLE articles (id INTEGER PRIMARY KEY, title TEXT)')
cursor.execute("INSERT INTO articles (title) VALUES ('article')")
raw.commit()
cursor.execute('SELECT title FROM articles')
res = cursor.fetchall()
print(res)
cursor.close()
raw.close()
Результат выполнения кода:
[('article',)]
Пример
Давайте убедимся, что после закрытия «сырого» соединения движок продолжает работать и возвращает новое соединение из пула:
from sqlalchemy import create_engine
engine = create_engine('sqlite:///:memory:')
raw1 = engine.raw_connection()
raw1.close()
raw2 = engine.raw_connection()
cursor = raw2.cursor()
cursor.execute('SELECT 1')
res = cursor.fetchone()
print(res)
cursor.close()
raw2.close()
Результат выполнения кода:
(1,)