Понимание сессии с зависимостью от fastApi

Я новичок в Python и изучал FastApi и SQL модели.

Ссылка: https://sqlmodel.tiangolo.com/tutorial/fastapi/session-with-dependency/#the-with-block

Здесь у них что-то вроде этого

def create_hero(*, session: Session = Depends(get_session), hero: HeroCreate):
    db_hero = Hero.from_orm(hero)
    session.add(db_hero)
    session.commit()
    session.refresh(db_hero)
    return db_hero

Здесь я не могу понять эту часть

    session.add(db_hero)
    session.commit()
    session.refresh(db_hero)

Что он делает и как он работает?

Не могу понять этого

In fact, you could think that all that block of code inside of the create_hero() function is still inside a with block for the session, because this is more or less what's happening behind the scenes.

But now, the with block is not explicitly in the function, but in the dependency above:

Это объяснение из docsчто такое сессия

В самом общем смысле, сессия устанавливает все разговоры с базой данных и представляет собой "зону хранения" для всех объектов. которые вы загрузили или связали с ним во время его жизни. Он обеспечивает интерфейс, в котором выполняются SELECT и другие запросы, которые возвращают и изменяют объекты ORM-сопоставления. Сами объекты ORM хранятся внутри сессии, в структуре, называемой карта идентичности - структура данных, которая хранит уникальные копии каждого объекта, где "уникальный" означает "уникальный". объекта, где "уникальный" означает "только один объект с определенным первичным ключом".

Со

# This line just simply create a python object
# that sqlalchemy would "understand".
db_hero = Hero.from_orm(hero)

# This line add the object `db_hero` to a “holding zone”
session.add(db_hero)

# This line take all objects from a “holding zone” and put them in a database
# In our case we have only one object in this zone, 
# but it is possible to have several
session.commit()

# This line gets created row from the database and put it to the object. 
# It means it could have new attributes. For example id, 
# that database would set for this new row
session.refresh(db_hero)
Вернуться на верх