Python, FastAPI, 8.
Полезные ресурсы
- У постгреса есть официальная документация, доступная и на английском и на русском. Причём документация эта написана достаточно доступно. В частности, там есть раздел про транзакции: на английском и на русском.
Код с занятия
Обратите внимание, что перед запуском надо установить и asyncpg, и sqlalchemy.
import asyncio
from sqlalchemy import select, insert
from sqlalchemy.orm import Mapped, mapped_column, DeclarativeBase
from sqlalchemy.ext.asyncio import create_async_engine
class Base(DeclarativeBase):
pass
class Users(Base):
__tablename__ = "users"
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str] = mapped_column(nullable=False)
age: Mapped[int]
passport: Mapped[int]
class Tasks(Base):
__tablename__ = "tasks"
id: Mapped[int] = mapped_column(primary_key=True)
title: Mapped[str]
async def main():
engine = create_async_engine(
"postgresql+asyncpg://postgres:postgres@127.0.0.1/postgres",
echo=True, # SQLAlchemy воспринимает это как указание писать в консоль все SQL запросы которые он отправляет в базу данных через asyncpg
)
conn = await engine.connect()
# эта строчка вызывает через проверку того что есть в БД и затем создание таблиц (привязанных к Base) которых там ещё нет
await conn.run_sync(Base.metadata.create_all)
stmt = insert(Users).values(name="Mihail", age=19, passport=123123)
await conn.execute(stmt)
stmt = select(Users)
result = await conn.execute(stmt)
print(result.all())
# коммитим текущую транзакцию (по-простому "сохраняем изменения")
await conn.commit()
await conn.rollback()
await conn.close()
asyncio.run(main())Домашнее задание
Попробуйте переписать код из прошлого домашнего задания с asyncpg на asyncpg+SQLAlchemy.