Метод commit класса Session
Метод commit класса Session
фиксирует текущую транзакцию и сохраняет
все изменения, накопленные в сессии, в базе
данных. Метод не принимает обязательных
параметров и не возвращает значения.
После вызова commit все объекты
в сессии по умолчанию помечаются как
устаревшие и будут загружены заново при
следующем обращении.
Синтаксис
Session.commit()
Пример
Давайте создадим сессию, добавим новый
объект и зафиксируем изменения методом
commit:
from sqlalchemy import create_engine, String
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] = mapped_column(String(50))
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
article = Article(title='article 1')
session.add(article)
session.commit()
print(article.id)
Результат выполнения кода:
1
Пример
Давайте изменим существующий объект и зафиксируем изменения:
from sqlalchemy import create_engine, String
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] = mapped_column(String(50))
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
article = Article(title='article 1')
session.add(article)
session.commit()
article.title = 'article 2'
session.commit()
res = session.get(Article, article.id)
print(res.title)
Результат выполнения кода:
"article 2"
Пример
Давайте удалим объект и зафиксируем
удаление методом commit:
from sqlalchemy import create_engine, String
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] = mapped_column(String(50))
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
with Session(engine) as session:
article = Article(title='article 1')
session.add(article)
session.commit()
session.delete(article)
session.commit()
res = session.get(Article, article.id)
print(res)
Результат выполнения кода:
None