Метод connection
Метод connection класса Session возвращает объект
Connection, который используется сессией для взаимодействия
с базой данных. Метод не принимает обязательных параметров и
возвращает соединение, привязанное к текущей транзакции сессии.
Если транзакция еще не начата, она будет запущена автоматически.
Полученное соединение можно использовать для выполнения
низкоуровневых SQL-запросов в обход ORM.
Синтаксис
session.connection()
Пример
Давайте создадим сессию и получим объект соединения:
from sqlalchemy import create_engine
from sqlalchemy.orm import Session
engine = create_engine('sqlite:///:memory:')
with Session(engine) as session:
conn = session.connection()
print(conn)
Результат выполнения кода:
"<sqlalchemy.engine.base.Connection object at 0x...>"
Пример
Давайте выполним SQL-запрос напрямую через соединение сессии:
from sqlalchemy import create_engine, text
from sqlalchemy.orm import Session
engine = create_engine('sqlite:///:memory:')
with Session(engine) as session:
conn = session.connection()
res = conn.execute(text('SELECT 1 AS value'))
print(res.fetchone())
Результат выполнения кода:
"(1,)"
Пример
Давайте создадим таблицу и вставим данные через соединение сессии, а затем прочитаем их через ORM:
from sqlalchemy import create_engine, text
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(primary_key=True)
title: Mapped[str]
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
conn = session.connection()
conn.execute(text("INSERT INTO articles (title) VALUES ('article')"))
session.commit()
article = session.get(Article, 1)
print(article.title)
Результат выполнения кода:
"article"