Атрибут bind класса Session
Атрибут bind класса Session
хранит движок или соединение, к которому привязана сессия.
Через этот атрибут сессия получает доступ к базе данных,
открывает транзакции и выполняет SQL-запросы.
Если при создании сессии параметр bind не был передан,
атрибут будет равен None, и его можно задать позже.
Синтаксис
session.bind
Пример
Давайте создадим сессию с привязкой к движку
SQLite в памяти и выведем атрибут bind:
from sqlalchemy import create_engine
from sqlalchemy.orm import Session
engine = create_engine('sqlite:///:memory:')
session = Session(bind=engine)
print(session.bind)
Результат выполнения кода:
"Engine(sqlite:///:memory:)"
Пример
Давайте посмотрим, чему равен атрибут bind,
если сессия создана без привязки:
from sqlalchemy.orm import Session
session = Session()
print(session.bind)
Результат выполнения кода:
"None"
Пример
Давайте зададим атрибут bind после создания сессии
и выполним запрос к базе:
from sqlalchemy import create_engine, text
from sqlalchemy.orm import Session
engine = create_engine('sqlite:///:memory:')
session = Session()
session.bind = engine
res = session.execute(text('SELECT 1'))
print(res.scalar())
Результат выполнения кода:
"1"
Пример
Давайте свяжем сессию с моделью и убедимся,
что через атрибут bind создаются таблицы:
from sqlalchemy import create_engine
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)
session = Session(bind=engine)
article = Article(title='article')
session.add(article)
session.commit()
print(session.bind)
Результат выполнения кода:
"Engine(sqlite:///:memory:)"
Смотрите также
-
класс
Session,
который управляет жизненным циклом объектов -
метод
get_bind,
который возвращает движок для конкретного объекта -
метод
connection,
который возвращает текущее соединение сессии -
метод
commit,
который фиксирует транзакцию через привязанный движок