SQLAlchemy №8. Основы ORM. Сессия и Unit of Work.

Поделиться
HTML-код
  • Опубликовано: 2 окт 2024
  • НаукаНаука

Комментарии • 13

  • @kirill_bykov
    @kirill_bykov 19 дней назад

    Стрёмно, конечно, так делать: пошептал вначале, чтоб я громкость прибавил, а потом долбанул по ушам проигрышем. А когда оглушил, снова шептать.

  • @altq33
    @altq33 Год назад +1

    Спасибо, очень сложно было разбираться в алхимии из-за обилия старого кода(до 2.0) в интернете, теперь всё намного понятнее, очень жду про relations, поломали они мне запросов на проекте)

  • @you-ed6cm
    @you-ed6cm Год назад

    Можешь снять видио с осинхронной работой с бд

    • @massonnn
      @massonnn  Год назад

      Разница в синхронной и асинхронной работе минимальна, и тем более на канале уже было видео по организации асинхронной алхимии (в курсе aiogram)

  • @stepanbrop9888
    @stepanbrop9888 Год назад

    Здравствуйте. Смотрю Ваши уроки, все понятно и прекрасно) Однако который день мучаюсь с проблемой - как сохранять данные в бд? Вопрос звучит глупо, но идей уже ноль. Данные сохраняются только на один запуск кода. Если комментирую session. comit(), то при запросе select показывает, что база данных пуста. Подскажите, пожалуйста, как это можно исправить?

    • @massonnn
      @massonnn  Год назад

      нужно смотреть код

    • @stepanbrop9888
      @stepanbrop9888 Год назад

      @@massonnn могу скинуть сюда

    • @stepanbrop9888
      @stepanbrop9888 Год назад

      @@massonnn from sqlalchemy import create_engine, inspect, select
      from sqlalchemy.orm import Session, DeclarativeBase, Mapped, mapped_column
      engine = create_engine(url='sqlite+pysqlite:///:memory:', echo=True)
      session = Session(engine, expire_on_commit=True, autoflush=False)
      class Base(DeclarativeBase):
      pass
      class User(Base):
      __tablename__ = 'users'
      id: Mapped[int] = mapped_column(primary_key=True)
      name: Mapped[str]
      age: Mapped[int]
      surname: Mapped[str]
      Base.metadata.create_all(engine)
      def set_user(name: str, surname: str, age: int):
      session.add(User(age=age, name=name.capitalize(), surname=surname.capitalize()))
      def get_user(name: str, surname: str, age: int):
      result = session.execute(
      select(User).where(User.name == name.capitalize(), User.surname == surname.capitalize(), User.age == age))
      return result.mappings().all()
      set_user(name='Привет', surname='goodbye', age=123)
      session.commit()
      print(get_user(name='Привет', surname='goodbye', age=123))

    • @massonnn
      @massonnn  Год назад

      @@stepanbrop9888 лучше в чат в тг, здесь будет сложно читать

    • @stepanbrop9888
      @stepanbrop9888 Год назад

      @@massonnn Хорошо, спасибо

  • @sergvish6843
    @sergvish6843 7 месяцев назад

    Полезное видео. Автор, только одно замечание к твоим видео - не называй экземпляры классов инстанциями, слух режет честное слово. Существует судебная инстанция, но это из другой оперы. Есть еще несколько замечаний по другим видео, но они незначительные, о них я умолчу.
    По этой конкретно теме ты разложил то чего я не нашел у других авторов. Классно. Респект.

    • @massonnn
      @massonnn  7 месяцев назад +2

      Инстанция в данном случае это калька на "instance", что буквально переводится как экземпляр. Дело привычки, но я стараюсь избавиться от таких слов.