FastAPI - Базы данных и миграции Alembic #4

แชร์
ฝัง
  • เผยแพร่เมื่อ 27 พ.ค. 2024
  • В этом видео мы создадим модель базы данных и прогоним миграции для переноса этих моделей в саму базу данных. Асинхронные запросы к базе данных будут в следующих видео (5 и 6).
    Освой backend разработку на FastAPI с НУЛЯ до выхода в продакшн за 3 месяца: clck.ru/38ZcDP
    🚨 Продажи открыты только до 31 мая 2024 года! 🚨
    Прочитать отзывы к курсу можно на Stepik: clck.ru/38ZdhZ
    Репозиторий на Github с кодом из видео: t.me/artemshumeiko/9
    Мой телеграм-канал: t.me/artemshumeiko
    Скачать PostgreSQL для Windows: www.enterprisedb.com/download...
    Скачать PostgreSQL для Linux/MacOS: www.digitalocean.com/communit...
    Скачать pgAdmin для Windows: www.pgadmin.org/download/pgad...
    Скачать pgAdmin для Linux/MacOS: www.pgadmin.org/download/pgad...
    Создать базу данных postgresql через docker: docker run -p 5432:5432 --name pg_trading -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres -e POSTGRES_DB=postgres -d postgres:13.3
    Включить pgAdmin через docker: docker run -e 'PGADMIN_DEFAULT_EMAIL=admin@admin.admin' -e 'PGADMIN_DEFAULT_PASSWORD=admin' -d dpage/pgadmin4 (Обратите внимание, что при запуске в контейнере ip базы данных сменится. У меня на ubuntu это 172.17.0.1, у вас может быть другой.)
    Поддержать канал:
    Boosty: boosty.to/artemshumeiko
    0:00 - Вступление
    0:34 - Как развернуть базу данных PostgreSQL на своем компьютере
    2:14 - Зачем создавать модель базы данных на бэкенде
    4:00 - Установка библиотек и создание модели таблиц
    14:45 - Конфигурация alembic
    27:04 - Время поставить лайк и подписаться
    #fastapi #python #backend #django #flask #docker #sql #celery #разработка #программирование

ความคิดเห็น • 205

  • @artemshumeiko
    @artemshumeiko  ปีที่แล้ว +27

    Я ошибся в видео и хочу попросить вас не использовать Table() для создания моделей таблиц -- только классы, например, class User(Base). Это более предпочтительный и распространенный вариант.
    Освой backend разработку на FastAPI с НУЛЯ до выхода в продакшн за 3 месяца: clck.ru/38ZcDP
    *🚨 Продажи открыты только до 31 мая 2024 года! 🚨*
    Прочитать отзывы к курсу можно на Stepik: clck.ru/38ZdhZ
    Так получилось, что в этом видео мы не подключились к базе данных и не сделали ни одного запроса. В следующих двух видео (5 и 6) рассматривается как создать асинхронное подключение (5) и асинхронные запросы к базе (6). Можно ориентироваться по тайм-кодам этих видео. Приятного изучения!

    • @captaingree3079
      @captaingree3079 ปีที่แล้ว +1

      Также был дан плохой совет использовать JSON тип для хранения permissons: 1я НФ чётко говорит не делать так. Понятно что процесс нормализации каждый проводит так глубоко, как хочет, но первые 3 прям важны для избежания аномалий в дальнейшем.

    • @artemshumeiko
      @artemshumeiko  ปีที่แล้ว

      @@captaingree3079 вполне распространенная практика. Зачем тогда json в Postgres? :)

    • @captaingree3079
      @captaingree3079 ปีที่แล้ว +3

      ​@@artemshumeiko Странный вопрос.. а зачем ООП в postgres? Чтобы было, всегда найдётся специфичный кейс для данной функциональности, за это мы и любим postgres. К примеру, json можно было бы использовать для хранения неких специфичных геопространственных координат, которые нельзя представить другими типами. Или может какие-то данные из монги, где всё хранится в JSONB ... но уж точно не permissions - это ведёт к аномалиям. К примеру вы решите удалить какую-то роль/права полностью. Чтобы это сделать вам придётся распарсить каждую роль и обновить этот JSON - долго. А что если сразу после удаления прилетит запрос который добавит пользователя с этой удалённой ролью? Вот вам и аномалия удаления...

    • @user-bf2iw8id4v
      @user-bf2iw8id4v 11 หลายเดือนก่อน

      А я только хотел спросить "почему не декларативный подход?" А тут уже и ответ на месте

    • @fresh_wind87
      @fresh_wind87 11 หลายเดือนก่อน +7

      такие вещи переснимают, а не говорят ,чтобы как попало наугад сам пытался сделать

  • @eyeseyeseyes3555
    @eyeseyeseyes3555 ปีที่แล้ว +74

    Возможно кому-то поможет)
    В процессе создания сервера столкнулся с такими проблемами:
    1) Во вкладке Create не было Server, только ServerGroup. Чтобы "Создать" сервер необходимо было перейти во вкладку Register и там выбрать Server, после чего откроется окно как на видео 1:09.
    2) Повторил все действия как и было на видео, но получил ошибку "unable to connect server"
    Решение: создаю сервер через вкладку Register -> Server, в поле password вписываю не postgres а свой пароль от pdadmin, который задал при первом входе в программу. Машина заработала ))
    Артём, большое спасибо за курс!) Всем удачи в постижении FastAPI и да пребудет с нами сила!)

    • @artemshumeiko
      @artemshumeiko  ปีที่แล้ว +2

      Спасибо за вашу помощь!

    • @user-jo8ie6ye2m
      @user-jo8ie6ye2m ปีที่แล้ว +1

      Большое спасибо! Очень помогло!

    • @user-ig3rv1xv5g
      @user-ig3rv1xv5g ปีที่แล้ว +1

      Дай бог здоровья мил человек!

    • @fresh_wind87
      @fresh_wind87 ปีที่แล้ว +1

      Спасибо большое!

    • @PavelNebo
      @PavelNebo 10 หลายเดือนก่อน

      респектос

  • @user-nl2mc5le7o
    @user-nl2mc5le7o ปีที่แล้ว +5

    Артём, спасибо большое за уроки!! Очень все понятно и просто объясняешь!! Одно удовольствие учить FAST API c твоими уроками))

  • @ashaprinskiy
    @ashaprinskiy 9 หลายเดือนก่อน +1

    Спасибо за быстрый гайд по использованию Alembic!

  • @user-hh3jt4gs2q
    @user-hh3jt4gs2q 9 หลายเดือนก่อน +2

    Спасибо тебе огромное за твой труд! Очень полезно!

  • @BestDron
    @BestDron ปีที่แล้ว +23

    Отличное видео, объясняешь доходчиво.
    Вот-бы про чистую архитектуру ещё посмотреть.
    Патерн репозиторий, слой бизнес логики и т.д .
    Fastapi отличный фреймворк , но в нём нет ни какой архитектуру. И за этого новичок может создать такой код, волосы потом выдираешь.
    Хотя- бы расскажи про разделение route.

    • @artemshumeiko
      @artemshumeiko  ปีที่แล้ว +7

      Спасибо за отзыв! Про разделение раутов обязательно расскажу. На остальные темы тоже подумаю, что можно рассказать

  • @user-yk4qq4nt7o
    @user-yk4qq4nt7o 9 หลายเดือนก่อน

    Благодарю за урок, много полезной информации!

  • @user-yz5ho2jf3q
    @user-yz5ho2jf3q 4 หลายเดือนก่อน +7

    При написании команды: alembic revision --autogenerate -m "Database creation"
    выводит ошибку: sqlalchemy.exc.OperationalError: (psycopg2.OperationalError)
    *я посмотрел, ошибка связана с тем, что в модуле context нет config
    то есть ошибка в этой части кода, как я понимаю: config = context.config
    Делал все строго по шагам. Можете сказать, почему возникает такая ошибка?

    • @balbesina228
      @balbesina228 หลายเดือนก่อน

      Нашел в комментах ответ. В .енв в db_pass нужно ввести пароль, который указывали при создании сервера

  • @almaspernshev7370
    @almaspernshev7370 7 หลายเดือนก่อน +10

    Если кому-то интересно, то можете следующим образом объявить модели:
    class Roles(Base):
    __tablename__ = "roles"
    id = Column(Integer, primary_key=True)
    name = Column(String, nullable=False)
    permissions = Column(JSON, nullable=False)

    class Users(Base):
    __tablename__ = "users"
    id = Column(Integer, primary_key=True)
    email = Column(String, nullable=False)
    username = Column(JSON, nullable=False)
    password = Column(String, nullable=False)
    registered_at = Column(TIMESTAMP(timezone=True), nullable=False, server_default=text("now()"))
    role_id = complex(Integer, ForeignKey("roles.id", ondelete="CASCADE"))

    • @neyrostar
      @neyrostar 6 หลายเดือนก่อน

      Что такое Base? Откуда его импортировать? В sqlalchemy 2.0 его нет

    • @user-vc2nf9cv8b
      @user-vc2nf9cv8b 6 หลายเดือนก่อน

      @@neyrostar
      from sqlalchemy.orm import declarative_base
      BaseModel = declarative_base()

    • @user-vc2nf9cv8b
      @user-vc2nf9cv8b 6 หลายเดือนก่อน

      @@neyrostar А вообще, можно было зайти в доку и найти ответ за... минуты 3 что ли=)

    • @neyrostar
      @neyrostar 6 หลายเดือนก่อน

      @@user-vc2nf9cv8b Так можно было не писать комментарий тогда, потому что это тоже всё есть в доках.

    • @user-vc2nf9cv8b
      @user-vc2nf9cv8b 6 หลายเดือนก่อน

      @@neyrostar Интересные вы люди, кнш)
      Я бы спасибо сказал)
      Впрочем цинизм - выбор индивидуальный

  • @user-po5tg2sy1j
    @user-po5tg2sy1j ปีที่แล้ว +2

    вот отлично прям показано с переменными из .env Очень грамотно. На ютубе такое не встречал. Спасибо!

    • @memeger89
      @memeger89 11 หลายเดือนก่อน +1

      А ты искал? th-cam.com/users/results?search_query=fastapi+sqlalchemy+env

  • @user-pk6nr8yv1b
    @user-pk6nr8yv1b ปีที่แล้ว +1

    Спасибо, что помогаешь нам. Всего тебе лучшего😁👍

  • @TheAlexBush
    @TheAlexBush 6 หลายเดือนก่อน

    Офигенно шикарно объясняешь. Спасибо!

    • @artemshumeiko
      @artemshumeiko  6 หลายเดือนก่อน

      Спасибо!!

  • @denk2k
    @denk2k ปีที่แล้ว +5

    Отлично! Новое видео🤗

  • @bugagashenka3680
    @bugagashenka3680 5 หลายเดือนก่อน

    Мои мысли при просмотре видео: "Почему ты расхваливал FastAPI в первом ролике плейлиста как асинхронный, но все примеры, даже библиотека для работы с постргесом синхронные.....?"
    Потом зашел почитать как обычно коменты, и увидел ответ в закрепленном :)
    Бегу смотреть дальше!

  • @bondarden
    @bondarden 8 หลายเดือนก่อน

    Артем, спасибо. Может быть уже говорили, но не обязательно прописывать python3.8 перед pip, так как pip вызывается из venv а там он связан с конкретной версией python, с которой этот venv был создан.

  • @mashafrmrussia
    @mashafrmrussia ปีที่แล้ว +2

    Спасибо за уроки!
    После выполнения
    alembic revision --autogenerate -m "Database creation"
    получаю ошибку TypeError: 'property' object is not iterable
    Подскажите, что делаю не так? Спасибо!

  • @bgs12
    @bgs12 9 หลายเดือนก่อน

    круто все понятно и просто объяснено

  • @sisio4980
    @sisio4980 ปีที่แล้ว +10

    Ты бы хотя бы в гите поменял создания таблиц на основе классов, чтобы весь флоу посмотреть

  • @maxjokar7920
    @maxjokar7920 ปีที่แล้ว

    Thanks so much for your nice video .👍

  • @Keriokutori
    @Keriokutori ปีที่แล้ว +1

    большое спасибо за серию видосов, сейчас для меня очень актуально. Пожалуйста не останавливайся. Все что касается бэра очень интересно!!!

  • @user-yr8tm1cd1k
    @user-yr8tm1cd1k 16 วันที่ผ่านมา

    18:32, Думаю для удобства использовать decouple.

  • @user-bf6hz5sf9s
    @user-bf6hz5sf9s 8 หลายเดือนก่อน +2

    не подскажете я не понимаю почему у вас 21:20 работает import config??
    ведь файл config находится на один уровень выше нашего каталога
    когда я написал то же самое в своём проекте pycharm не видит файл config
    единственный способ это решить это написать from ..config import DB_HOST. Но в таком случае я получаю предупрежедение о относительном импорте
    просто не понятно почему у вас это работает
    p.s почему то после перезапуска начал просто работать import config (как в видео). Я не знаю как это работает. Очень странно...

  • @iteospace
    @iteospace 11 หลายเดือนก่อน

    Было бы неплохо еще добавить примеры для типовых сценариев использования - создание, выгрузка и модификация агрегатов.

  • @user-gv4gp8we6u
    @user-gv4gp8we6u ปีที่แล้ว +1

    Отличное видео! Была проблема с миграцией, как оказалось проблема была в пароле. Пароль от БД у меня нестандартный😁

    • @user-gv4gp8we6u
      @user-gv4gp8we6u ปีที่แล้ว

      Переделал через asyncpg, пока счастлив... Спасибо))

    • @sashass099
      @sashass099 ปีที่แล้ว +1

      @@user-gv4gp8we6u как реализовал раздачу сессий через asyncpg?) Интересно узнать. Было бы хорошо, если бы скинул источник по которому делал. Знаю, что в случае с asyncpg + sqlalchemy нужно чутка по-другому организовывать. Спасибо

    • @fresh_wind87
      @fresh_wind87 ปีที่แล้ว

      @@sashass099 и он благополучно не ответил чудак на букву м

  • @mksmvnv
    @mksmvnv 5 หลายเดือนก่อน

    почему в postgresql при входе в properties таблицы users, выдает сообщение something went wrong?

  • @Anthony_Private
    @Anthony_Private ปีที่แล้ว

    Ты большой молодец!)

  • @artimovskiy
    @artimovskiy ปีที่แล้ว +4

    Артём, подскажите, если не затруднит: в ваших видео встречаются 2 структуры:
    1.
    class User(Base):
    __tablename__ = "users"
    id = Column(BigInteger, primary_key=True)
    email = Column(String(50), unique=True, index=True, nullable=False)
    ...
    2. users = Table(
    'users',
    metadata,
    Column('id', BigInteger, primary_key=True),
    Column('email', String(50), unique=True, index=True, nullable=False)
    В обоих ли случаях это модели? Если да, то в чём всё же отличия; если нет то что из двух является моделью (в понимании FastAPI и чем является (каким термином можно назвать) вторую структуру)?
    Логика подсказывает, что это разные вещи и что моделью является п.1, но тогда непонятно почему п. 2 у вас описывается в файле с именем models.py?

    • @artemshumeiko
      @artemshumeiko  ปีที่แล้ว +1

      Отличный вопрос! В видео я использовал Table(), не зная о том, что данный способ уже устарел. Сейчас редко можно встретить данный подход при проектировании моделей таблиц на бэкенде. Этот стиль/метод называется классическим или императивным. Более современный, декларативный стиль (через создание класса), используется повсеместно и рекомендуется создателем SQLAlchemy.
      Обе структуры можно назвать моделью, ведь они описывают таблицу в базе данных в той или иной форме.
      Референс: docs.sqlalchemy.org/en/20/orm/mapping_styles.html

  • @GRIMEANARCHY
    @GRIMEANARCHY ปีที่แล้ว

    Ждём новое)

  • @user-dz6et7mf6l
    @user-dz6et7mf6l ปีที่แล้ว

    Артём, привет! Спасибо за уроки, очень нравятся! Скажи, а зачем Postgres подключать через контейнер?

    • @artemshumeiko
      @artemshumeiko  ปีที่แล้ว

      Привет! Видимо, я привык просто к такому способу; возможно, стоило просто локально развернуть и не усложнять видео.
      Из плюсов контейнера, что базу можно развернуть на удобном мне порте (дефолтный 5432 у меня занят под другие задачи), а также что можно быстро ее снести

  • @extendomerc1701
    @extendomerc1701 11 หลายเดือนก่อน

    спасибо. были затыки пытался для асинхроного подключения через Base.create.... сделать падала ошибка. с алембиком все сработало

  • @user-zs6oi1bz7t
    @user-zs6oi1bz7t ปีที่แล้ว

    Супер видео! спасибо! а можно ссылку на проект в гите ? изменение на алхимию вторую будет?

    • @artemshumeiko
      @artemshumeiko  ปีที่แล้ว

      ссылка на гит: github.com/artemonsh/fastapi_course
      По второй алхимии обновлять информацию не планирую

  • @Artem-wk1vn
    @Artem-wk1vn ปีที่แล้ว +3

    Спасибо большое за ваши уроки!!! Можете пожалуйста в будущем сделать видео про авторизацию с ролями, пользователями и jwt токеном ?

    • @artemshumeiko
      @artemshumeiko  ปีที่แล้ว +4

      В плане курса есть ровно то, о чем вы просите. Ждите :)

  • @LorenzoY2J
    @LorenzoY2J ปีที่แล้ว +1

    Артем, здравствуйте, может поможете. Все делал по вашему уроку, но почему-то в файле env.py не хочет импортироваться данные с файла config и models. Если делать как вы рассказывали, то он просто подчеркивает данные. Если пытаться импортировать как из папки, где лежит файл from fastapiexample.config import DB_HOST, DB_PORT, DB_USER, DB_NAME, DB_PASS, то выдает ошибку отсутствия модуля. С чем может быть проблема? У меня уже не в первый раз проблема с импортом, если я импортирую из разных папок в Pycharm.

    • @StepaFomin
      @StepaFomin ปีที่แล้ว +2

      Здравствуйте, решили проблему?

    • @fresh_wind87
      @fresh_wind87 ปีที่แล้ว +1

      @@StepaFomin он даже ответить не может, так ему и надо

    • @user-pw6we8gd1s
      @user-pw6we8gd1s 11 หลายเดือนก่อน +1

      @@fresh_wind87 Столкнулся с такой же проблемой. Сможете помочь?

  • @granddndz
    @granddndz ปีที่แล้ว

    Я прошел урок на Ubuntu и с dbeaver, все гуд. может подсказать, dbeaver это аналог pgAdmin или есть существенная разница?

    • @artemshumeiko
      @artemshumeiko  ปีที่แล้ว +1

      По моему опыту это аналог

  • @MasterDomai
    @MasterDomai ปีที่แล้ว

    круто!

  • @user-xm5se6yz4y
    @user-xm5se6yz4y 11 หลายเดือนก่อน

    при попытке миграции выдает следующую ошибку: TypeError: 'property' object is not iterable

  • @user-sn5fm2dy8s
    @user-sn5fm2dy8s ปีที่แล้ว +3

    При выполнении alembic revision --autogenerate -m "Ddlsadlasplase creation" у меня такая ошибка выводиться.
    sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) connection to server at "localhost" (127.0.0.1), port 5432 failed: FATAL: password authentication failed for user "postgres".

  • @kaktotak5834
    @kaktotak5834 ปีที่แล้ว +2

    Здравствуйте, Артём. Не могу установить posgresql. "Looks like you've followed a broken link or entered a URL that doesn't exist on this site.", как это можно исправить?

    • @djdididod9928
      @djdididod9928 หลายเดือนก่อน

      Решил?

    • @denisvolkov4784
      @denisvolkov4784 7 วันที่ผ่านมา

      @@djdididod9928 version: '3.9'
      в корне проекта файл docker-compose.yaml
      содержимое:
      services:
      db:
      container_name: pg_db
      image: postgres
      env_file:
      - .env
      ports:
      - "5432:5432"
      pgadmin:
      container_name: pgadmin
      image: dpage/pgadmin4
      env_file:
      - .env
      ports:
      - "5050:80"
      в корне проекта файл .env
      DB_USER = root
      DB_PASS = toor
      DB_HOST = localhost
      DB_PORT = 5432
      DB_NAME = имя твоей БД
      POSTGRES_DB=имя твоей БД
      POSTGRES_USER=root
      POSTGRES_PASSWORD=toor
      POSTGRES_HOST=localhost
      POSTGRES_PORT=5432
      PGADMIN_DEFAULT_EMAIL=email@email.email
      PGADMIN_DEFAULT_PASSWORD=root
      в консоли docker compose up --build

  • @NoName-bp6uo
    @NoName-bp6uo ปีที่แล้ว +3

    Как устранить эту ошибку? Это может быть связано с версией языка?
    *FAILED*
    *Traceback (most recent call last):*
    *File "", line 198, in _run_module_as_main*
    *File "", line 88, in _run_code*

    • @potatoandcoffee
      @potatoandcoffee 5 หลายเดือนก่อน +1

      сейчас та же проблема, подскажите, может вы уже нашли ее решение?

    • @wizard1109
      @wizard1109 วันที่ผ่านมา

      Перепроверьте в файле alembic.ini переменную sqlalchemy.url. У меня была такая же проблема, оказалось что пропустил знак % в одном месте

  • @user-vc9ij4su4e
    @user-vc9ij4su4e 6 หลายเดือนก่อน

    Подскажите, а как вообще можно обучать питону, если в нулину не понимаешь такой базовой штуки, как virtualenv?

  • @user-od2jl5uj6v
    @user-od2jl5uj6v 10 หลายเดือนก่อน

    Добрый вечер, после команды alembic revision --autogenerate -m "Database creation" выдается ошибка - "File "C:\Adef\billing_fastapi\venv\lib\site-packages\sqlalchemy\engine\url.py", line 893, in _parse_url
    components["port"] = int(components["port"])
    ValueError: invalid literal for int() with base 10: 'postgres:localhost:5432:postgres'" подскажите, что я делаю не так?

    • @artemshumeiko
      @artemshumeiko  10 หลายเดือนก่อน +1

      у вас неверно указан адрес базы данных
      он должен быть в формате DSN DATABASE_URL=postgres://{user}:{password}@{hostname}:{port}/{database-name}

    • @user-od2jl5uj6v
      @user-od2jl5uj6v 10 หลายเดือนก่อน

      ​@@artemshumeiko Добрый день! я указал адрес базы данных в таком формате "sqlalchemy.url={DB_USER}:{DB_PASS}@{DB_HOST}:{DB_PORT}/{DB_NAME}" но теперь выдается ошибка "components["port"] = int(components["port"])
      ValueError: invalid literal for int() with base 10: '{DB_PORT}'"

    • @artemshumeiko
      @artemshumeiko  10 หลายเดือนก่อน

      @@user-od2jl5uj6v в переменных окружения DB_PORT видимо не является целым числом

    • @user-od2jl5uj6v
      @user-od2jl5uj6v 10 หลายเดือนก่อน

      @@artemshumeiko , в файле .env у меня вот так прописаны переменные DB_HOST=localhost
      DB_PORT=5432
      DB_USER=postgres
      DB_NAME=postgres
      DB_PASS=postgres

    • @pishy_kommentu
      @pishy_kommentu 8 หลายเดือนก่อน

      Если для вас это не сработало, то попробуйте поменять порт на другой.

  • @fedorovalexander9652
    @fedorovalexander9652 ปีที่แล้ว

    Привет! Очень круто объясняешь, лайк+подписка однозначно!
    Можешь подсказать, если у меня уже есть БД на PostgreSQL, я могу не создавать классы в fastApi, а просто как бы законектиться к таблицам? Или для миграций обязательно нужно создавать как бы с помощью orm таблицы. как классы?

    • @artemshumeiko
      @artemshumeiko  ปีที่แล้ว +1

      Если таблицы уже есть, миграции не нужны, можно просто законнектиться к базе. Чтобы работать с базой через алхимию стоит создать модели через классы

    • @user-oc7ye5uv6r
      @user-oc7ye5uv6r 7 หลายเดือนก่อน

      @@artemshumeiko Немного не понял. Если у меня уже есть наполненная БД, то мне не надо использовать alembic?

    • @neyrostar
      @neyrostar 6 หลายเดือนก่อน

      @@user-oc7ye5uv6r не надо

  • @arknexter
    @arknexter 11 หลายเดือนก่อน

    А зечем мы городили весь этот огород с системными переменнными и вытаскиванием оттуда данных если в конечном итоге мы всё равно данные храним в файле .env? Похоже на велосипед

    • @arknexter
      @arknexter 8 หลายเดือนก่อน

      @@pyxcru Это не отменяет велосипеда. Всё равно на прод серверах всё в системных переменных будет в открытом виде. Почему не брать всё сразу из файла .env тогда с помощью библиотеки decouple, например?

  • @user-pd7ok3uw5j
    @user-pd7ok3uw5j หลายเดือนก่อน

    При попытке сделать ревизию выпадает исключение
    " File "E:\Users\User\PycharmProjects\FasiAPI_Training\L4_databases_and_migrations_with_Alembic\migrations\env.py", line 8, in
    from L4_databases_and_migrations_with_Alembic.config import DB_USER, DB_PASS, DB_HOST, DB_PORT, DB_NAME
    ModuleNotFoundError: No module named 'L4_databases_and_migrations_with_Alembic'"
    Вроде бы всё сделал по видео и импорты не подсвечиваются как ошибка, но не работает. Может кто-то сталкивался с такой проблемой?

  • @migunovich
    @migunovich ปีที่แล้ว

    Если кто-то как и я тупит и не понимает, почему не получается создать локальный сервер с бд. Устанавливаете программу MAMP, запускаете на ней локальный сервер и подключаетесь к нему с любой программы для sql. Я использую SQLPro Studio

  • @mmh7732
    @mmh7732 หลายเดือนก่อน

    Помогитееееее ребят когда пишу alembic revision --autogenerate -m 'DataBase configration' то пишет cannot import name 'load_dotenv' from 'dotenv' , уже и переустанавливал и 20 раз писал pip install python-dotenv,не работает уже и с гита репозиторий на комп пушнул но все ровно не работает .

    • @artemshumeiko
      @artemshumeiko  หลายเดือนก่อน

      какая у вас версия Python? Случайно не 3.12?
      По любым вопросам можете обращаться в Python сообщество: t.me/python_community_rus

  • @neyrostar
    @neyrostar 6 หลายเดือนก่อน +1

    Лучше освоить SQLite для курсов, а не Posgres который мало кто может установить и настроить для элементарных запросов. Порой надо будет погружаться на месяц или годы.

    • @ivankosolapov430
      @ivankosolapov430 6 หลายเดือนก่อน

      Есть такое, вчера закончил курс по докеру проходить, решил начать fastapi - и вот незадача, вроде docker-compose поднимает всё, а как сделать миграции - не понятно, пишет, что где-то пароль неправильный :(

  • @cryhyble5750
    @cryhyble5750 7 หลายเดือนก่อน

    лучше использовать python-dotenv или environs?

    • @artemshumeiko
      @artemshumeiko  7 หลายเดือนก่อน

      Неважно. Что больше нравится)

  • @Borzoff
    @Borzoff ปีที่แล้ว

    Есть еще библиотека sqlmodel от создателя FastAPI, она объединяет pydantic модели и sqlalchemy модели

    • @user-xe3sd6qx6h
      @user-xe3sd6qx6h ปีที่แล้ว

      Пока сырая , лучше TortoiseORM

  • @mushroomhead4396
    @mushroomhead4396 ปีที่แล้ว

    Ты очень круто объясняешь, спасибо

  • @user-eb3tr8kt5n
    @user-eb3tr8kt5n 9 หลายเดือนก่อน +1

    про хэширование неправильно сказано
    хэш отличается тем, что его вообще нельзя расшифровать, можно только проверить совпадает ли имеющийся хэш с нашей захэшированной строкой
    невозможность дешифровки является главным критерием хэш-функции, помимо минимального количества коллизий

    • @neyrostar
      @neyrostar 6 หลายเดือนก่อน

      Всё верно. К тому же в хэш паролей принято добавлять ещё "соль"

  • @alekseyveld7559
    @alekseyveld7559 ปีที่แล้ว +4

    Артем, большое спасибо за материал! Можешь рассказать про FastApi-users и FastApi-admin?

    • @artemshumeiko
      @artemshumeiko  ปีที่แล้ว +1

      Привет! Хорошее предложение, я подумаю, как можно включить их в курс

  • @user-ig3rv1xv5g
    @user-ig3rv1xv5g ปีที่แล้ว

    два дня боролся с ошибкой "" появляющиеся при попытке создания сервера в PgAdmin как показано в уроке и как следствие ошибки при при проведении миграций в проекте, решение проблемы: пароль при создании должен совпадать с тем, с которым вы вошли на сервер

    • @user-le4hm2gs1y
      @user-le4hm2gs1y 4 หลายเดือนก่อน +1

      У меня та же проблемы была. В файле .env указал свой пароль в DB_PASS и ревизия прошла.

  • @ram_qr
    @ram_qr 4 หลายเดือนก่อน

    super!!!

  • @user-dp8yd9vg7w
    @user-dp8yd9vg7w หลายเดือนก่อน

    хорошо что доку чекал в это время, а там классы вместо тейблов

  • @ibrahimoglu
    @ibrahimoglu ปีที่แล้ว

    👍

  • @povladis6940
    @povladis6940 11 หลายเดือนก่อน +1

    16:28 Добавляем ASS, ОУ МААААЙ

    • @artemshumeiko
      @artemshumeiko  11 หลายเดือนก่อน

      ахахаха))

  • @a_n_t_o_n_09
    @a_n_t_o_n_09 7 หลายเดือนก่อน +1

    alembic revision --autogenerate -m 'Database creation' у меня после ввода команды все падает с ошибками :(

  • @fedordostoevskiy4209
    @fedordostoevskiy4209 ปีที่แล้ว

    Думал, зайду почитаю как Postgress работает. Попал на курс лекций Российской Postgress Pro по администрированию и dev этой базы данных. 👀Короче её нормально изучить сложнее чем Python! 😂😂😂

  • @defend00r
    @defend00r ปีที่แล้ว

    😃👏

  • @barmalejZ
    @barmalejZ 6 หลายเดือนก่อน

    В файле alembic.ini подключение к БД идет по postgresql. А не правильно ли будет указывать postgresql+asyncpg://%(DB_USER)s... ?

  • @shot2420
    @shot2420 ปีที่แล้ว

    Кто-нибудь сталкивался с такой ошибкой ? DBMS:
    Case sensitivity: plain=mixed, delimited=exact
    Driver: (ver. , JDBC)
    Effective version: PostgreSQL (ver. 0.0)
    Подсоединение по адресу localhost:5432 отклонено. Проверьте что хост и порт указаны правильно и что postmaster принимает TCP/IP-подсоединения.
    И как ее решить?

  • @user-bv1fg1uy2z
    @user-bv1fg1uy2z 2 หลายเดือนก่อน

    СРОЧНО!!После команды alembic revision --autogenerate -m "Database creation" вылазит ошибка UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc2 in position 61: invalid continuation byte. Перрыл весь интернет, ничего не помогает, буду очень признателен

    • @user-sc9cx8ke8m
      @user-sc9cx8ke8m 2 หลายเดือนก่อน

      Привет! Разобрался? У меня та же фигня

    • @N-gaga
      @N-gaga 2 หลายเดือนก่อน

      Была такая проблема, оказалось, что в файле ".env" мой пароль в DB_PASS содержал некорректные знаки для кодировки, типа @ и !, после изменения пароля на просто postgres всё сработало.
      Проверьте свои значения на предмет некорректных символов

  • @JIJI-zv1qp
    @JIJI-zv1qp ปีที่แล้ว

    Артем ты супер, а почему не закрывается сессия после использования

    • @artemshumeiko
      @artemshumeiko  ปีที่แล้ว +1

      Спасибо! Можете скинуть таймкод, пожалуйста?

    • @JIJI-zv1qp
      @JIJI-zv1qp ปีที่แล้ว

      @@artemshumeiko не правильно задал вопрос, когда используется with сессия закрывается же автоматический
      ```
      async def get_async_session() -> AsyncGenerator[AsyncSession, None]:
      async with async_session_maker() as session:
      async with session.begin():
      yield session
      ```
      есть ли смысл здесь добавлять 3тью строку

    • @JIJI-zv1qp
      @JIJI-zv1qp ปีที่แล้ว

      я понял что это строка отвечает за отмену всех предыдущих транзакций с базой в рамках 1 сессий, если одна транзакция c базой в рамках 1 сессий был выполнен не удачно. Это нужен тогда когда вы отправляете запрос на 1 метода а там праисходят несколько транзакций с базой. Например система перевода. Правильно?

    • @JIJI-zv1qp
      @JIJI-zv1qp ปีที่แล้ว

      except Exception:
      await session.rollback()
      raise

  • @Anitamamaru
    @Anitamamaru ปีที่แล้ว

    Артём, спасибо за курс. Очень хорошая подача материала. В этом уроке столкнулся с проблемой. Всё повторял за тобой, установил все зависимости ( кстати неплохо было бы в репозитории на Github добавить requirements.txt). Но при подготовке к миграции (alembic revision --autogenerate -m "Database creation") получаю ошибку conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
    sqlalchemy.exc.OperationalError: (psycopg2.OperationalError)
    У меня windows. Postgres запускаю в docker контейнере командой из описания к видео.

    • @artemshumeiko
      @artemshumeiko  ปีที่แล้ว +1

      Привет, спасибо за отзыв!
      К сожалению, я оставил в описании неполную команду для запуска базы данных в контейнере. Прошу извинить. Я поправил код: необходимо добавить к команде параметр p (port) "-p 5432:5432", чтобы можно было подключаться к базе не только из докера, но и с компьютера напрямую (первый порт -- это домашний, его можно задать любым, второй -- дефолтный порт postgres).
      requirements.txt сейчас добавлю во все уроки

    • @TheVirtyoz777
      @TheVirtyoz777 ปีที่แล้ว

      Такая же проблема, у тебя что нибудь получилось испраивть ?

  • @stanislaumisko2900
    @stanislaumisko2900 ปีที่แล้ว

    А чем отличается дефайн моделей через Base и через Metadata, я первый вариант использую, что-то лучше другого, или нет?

    • @artemshumeiko
      @artemshumeiko  ปีที่แล้ว +1

      На самом деле разницы нету. Есть лишь разница в подходах. Metadata используется при задании таблиц через Table (императивный метод), а Base - при задании через классы (декларативный метод).
      Больше инфы тут: docs.sqlalchemy.org/en/14/orm/mapping_styles.html

  • @Vladim1r
    @Vladim1r ปีที่แล้ว

    спасибо за видео
    8:50 вы сказали, что json недооценённый тип в sql, но на самом деле этот тип не нужно использовать тк таблицы в реляционных базах данных не должны содержать множества значений - это противоречит 1 нормальной форме отношения и самой идее реляционных баз данных, для множества значений в sql принято использовать ещё одну таблицу, запись в которой будет являться элементом этого множества, например в этом видео лучше сделать отдельную таблицу permissions и связать её с таблицей roles

    • @artemshumeiko
      @artemshumeiko  ปีที่แล้ว +2

      json давно добавлен в постгрес, его любят и им пользуются. Относитесь к json, как к атомарной единице, тогда с 1НФ все будет в порядке :)

  • @Notforgotka
    @Notforgotka 10 หลายเดือนก่อน

    Привет, Артем. Очень крутой курс. Но у меня на этом уроке во время alembic revision --autogenerate -m "Dtatabase creation" выскакивает ошибка sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) connection to server at "localhost" (::1), port 5432 failed: FATAL: role "postgres" does not exist. Подключал PostgreSQl через докер на маке. Но не много не понял зачем pgAdmin4 подключать через докер. Может быть в этом и етсть ошибка ?

    • @ozzyoz6824
      @ozzyoz6824 9 หลายเดือนก่อน

      нужно установить PostgresSQL и прописать login/password при регистрации сервера

  • @warflow
    @warflow 8 หลายเดือนก่อน

    плохо видно код, надо было шрифт увеличить

  • @seresno
    @seresno 7 หลายเดือนก่อน +1

    на 14:58 выходит ошибка from sqlalchemy.dialects.postgresql import BIGINT
    ModuleNotFoundError: No module named 'sqlalchemy.dialects.postgresql'... Не могу разобраться что не так..

    • @alekseigrigorchuk576
      @alekseigrigorchuk576 5 หลายเดือนก่อน

      У вас получилось разобраться?

  • @user-pl2cx2vm4l
    @user-pl2cx2vm4l 9 หลายเดือนก่อน

    тут возникает ошибка импорта, не импортируется из конфига переменные, вообще странно что не возникает ошибки у Артема, может дело в пайчарме и он прощает такое.

    • @Qustoos
      @Qustoos 6 หลายเดือนก่อน

      Добавь папку проекта в переменную окружения и оттуда подтягивай все данные.
      PROJECT_ROOT = os.path.abspath(os.path.join(
      os.path.dirname(__file__),
      os.pardir)
      )
      sys.path.append(PROJECT_ROOT)

  • @yarik_9541
    @yarik_9541 หลายเดือนก่อน

    обьясняет очень круто, прям все понятно структурировано, кайф, нооооооооооо у тебя есть привычка чавкать или плюскать или слюну глотать, бляяяяя, у меня глаз из за этого дергается хахахахах, понятное дело, особенности челюсти и прочее, но ухо мое постоянно это ловит)

    • @artemshumeiko
      @artemshumeiko  หลายเดือนก่อน

      Сорри, микро раньше был плохо настроен :(

  • @stepankokovin7841
    @stepankokovin7841 ปีที่แล้ว

    Артём, спасибо за материал!
    Для меня тут тема докера осталась нераскрытой, да и SQLAlchemy+Alembic довольно увесистая по объёму вещь
    Если у тебя есть на примете материал(кроме документации), прикрепи пожалуйста, будет очень полезно

  • @farapro8345
    @farapro8345 ปีที่แล้ว

    8:50 «очень недооцененный тип json в postgres»
    сразу видно чел джун, еще не хапнул с json в postgres

    • @AlexFeynman
      @AlexFeynman ปีที่แล้ว

      в некоторых кейсах json уместен, но конечно это не панацея

  • @milord3089
    @milord3089 ปีที่แล้ว

    когда следующее видео?

    • @artemshumeiko
      @artemshumeiko  ปีที่แล้ว +1

      В течение недели

  • @user-mz1xl4vr3l
    @user-mz1xl4vr3l ปีที่แล้ว +2

    По моему лучше Django пока ещё ничего нет, Я на нем за день поднял интернет магазин, все быстро и посто

    • @user-nu3ot7td1j
      @user-nu3ot7td1j 24 วันที่ผ่านมา

      сейчас все на fastapi идут, джанго долго изучать

  • @uglevod184
    @uglevod184 7 หลายเดือนก่อน

    так то норм )
    Только нафига такой умное лицо делать при озвучке официальной документации )
    товришь диктор )

  • @haskelllisp5998
    @haskelllisp5998 ปีที่แล้ว

    php sheet

  • @jcatstreams8550
    @jcatstreams8550 10 หลายเดือนก่อน

    Сильно дикое чувство, что весь этот курс ради рекламы своего платного курса, так как создаются таблицы через Base - так пишут уже больше года, но автор почему-то только сейчас об этом узнает и вместо пересоздания видео - просто написать об этом коммент, на ошибки других пользователей 0 ответов
    th-cam.com/video/iGMriwQ48MY/w-d-xo.html вот пример +- нормального курса

    • @user-yp2vh6jy7q
      @user-yp2vh6jy7q 8 หลายเดือนก่อน

      а напиши что там был за курс, а то ссылка больше не доступна

  • @Septman
    @Septman 26 วันที่ผ่านมา

    БОЖЕ КАК ЖЕ СЛОЖНО ЗДЕСЬ СОЗДАЕТСЯ МИГРАЦИИ ПО СРАВНЕНИЮ С DJANGO, YFFFF

    • @elshan4011
      @elshan4011 26 วันที่ผ่านมา

      я сам только что посмотрел видос тоже 50 на 50 понял. Но я в первый раз миграции изучаю, думаю дальше с примерами все пойму

  • @Dtankhaev
    @Dtankhaev 9 หลายเดือนก่อน

    Пако ты ли это

  • @user-dz6et7mf6l
    @user-dz6et7mf6l ปีที่แล้ว

    Может кому полезно будет. У меня миграции не создавались никак, пока я в терминале базу данных сам не создал с таким именем: 1. sudo -i -u postgres
    2. createdb .

    • @russul2700
      @russul2700 ปีที่แล้ว

      можно поподробнее, как именно и в каком порядке

  • @russul2700
    @russul2700 ปีที่แล้ว

    Работаю на OS, не через docker, Ошибка при попытки сделать миграцию conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
    sqlalchemy.exc.OperationalError: (psycopg2.OperationalError)
    многие сталкиваются с этой проблемой судя по комментариям, есть кто знает как решить эту проблему ?

    • @xanarchy4761
      @xanarchy4761 ปีที่แล้ว

      что-нибудь написано после (psycopg2.OperationalError)? у меня такая ошибка была, оказалось в .env написала просто local вместо localhost

    • @russul2700
      @russul2700 ปีที่แล้ว

      @@xanarchy4761 connection to server at "localhost" (127.0.0.1), port 5432 failed: FATAL: password authentication failed for user "postgres"
      вот это еще написано.
      Не у меня .env вроде без ошибок

    • @user-mn7ty7dr4f
      @user-mn7ty7dr4f ปีที่แล้ว

      @@russul2700 смени пароль бд на нужный
      sudo -u postgres psql
      ALTER USER postgres PASSWORD 'password';
      В этой команде postgres- имя суперпользователя, 'password' - твой пароль

  • @TheVirtyoz777
    @TheVirtyoz777 ปีที่แล้ว

    Работаю на винде, не через docker, Ошибка при попытки сделать миграцию conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
    sqlalchemy.exc.OperationalError: (psycopg2.OperationalError)

    • @denisslyusareko9158
      @denisslyusareko9158 ปีที่แล้ว

      Решил как то проблему?

    • @TheVirtyoz777
      @TheVirtyoz777 ปีที่แล้ว

      @@denisslyusareko9158 неа

    • @denisslyusareko9158
      @denisslyusareko9158 ปีที่แล้ว +1

      @@TheVirtyoz777 поставь данные бд(юсер, хост, пасворд тд..) такие какие у тебя и есть, а не с видео

    • @user-ew7wk5ho2b
      @user-ew7wk5ho2b ปีที่แล้ว

      чё как успехи?))

    • @Beloslav13
      @Beloslav13 ปีที่แล้ว

      вывод: все нормальные дядьки работают на линуксе. ставь линукс

  • @yvucrbgtb4939
    @yvucrbgtb4939 ปีที่แล้ว

    Работаю на macos и вот такая ошибка
    import psycopg2
    File "/Users/alihandaulethanov/.local/share/virtualenvs/backend-J0I8W3bQ/lib/python3.10/site-packages/psycopg2/__init__.py", line 51, in
    from psycopg2._psycopg import ( # noqa
    Users/alihandaulethanov/.local/share/virtualenvs/backend-J0I8W3bQ/lib/python3.10/site-packages/psycopg2/_psycopg.cpython-310-darwin.so' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64'))