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

💡 Попробуй онлайн-тренажёр для подготовки к техническому собеседованию: clck.ru/3B5gxT 💡
Предзапись на курс по поиску работы разработчику и техническим навыкам для Middle (FastAPI): forms.gle/Zw7bPnQvTsfekVH47
Забирай роадмап изучения самого востребованного фреймворка на Python - FastAPI здесь: t.me/ArtemShumeikoBot
Репозиторий на 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
В этом видео мы создадим модель базы данных и прогоним миграции для переноса этих моделей в саму базу данных. Асинхронные запросы к базе данных будут в следующих видео (5 и 6).
0:00 - Вступление
0:34 - Как развернуть базу данных PostgreSQL на своем компьютере
2:14 - Зачем создавать модель базы данных на бэкенде
4:00 - Установка библиотек и создание модели таблиц
14:45 - Конфигурация alembic
27:04 - Время поставить лайк и подписаться
#fastapi #python #backend #django #flask #docker #sql #celery #разработка #программирование

Пікірлер: 210

  • @artemshumeiko
    @artemshumeiko Жыл бұрын

    💡 Попробуй онлайн-тренажёр для подготовки к техническому собеседованию: clck.ru/3B5gwP 💡 Забирай роадмап изучения самого востребованного фреймворка на Python - FastAPI здесь: t.me/ArtemShumeikoBot Я ошибся в видео и хочу попросить вас не использовать Table() для создания моделей таблиц -- только классы, например, class User(Base). Это более предпочтительный и распространенный вариант. Так получилось, что в этом видео мы не подключились к базе данных и не сделали ни одного запроса. В следующих двух видео (5 и 6) рассматривается как создать асинхронное подключение (5) и асинхронные запросы к базе (6). Можно ориентироваться по тайм-кодам этих видео. Приятного изучения!

  • @captaingree3079

    @captaingree3079

    Жыл бұрын

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

  • @artemshumeiko

    @artemshumeiko

    Жыл бұрын

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

  • @captaingree3079

    @captaingree3079

    Жыл бұрын

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

  • @user-bf2iw8id4v

    @user-bf2iw8id4v

    Жыл бұрын

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

  • @fresh_wind87

    @fresh_wind87

    Жыл бұрын

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

  • @eyeseyeseyes3555
    @eyeseyeseyes3555 Жыл бұрын

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

  • @artemshumeiko

    @artemshumeiko

    Жыл бұрын

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

  • @user-jo8ie6ye2m

    @user-jo8ie6ye2m

    Жыл бұрын

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

  • @user-ig3rv1xv5g

    @user-ig3rv1xv5g

    Жыл бұрын

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

  • @fresh_wind87

    @fresh_wind87

    Жыл бұрын

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

  • @PavelNebo

    @PavelNebo

    11 ай бұрын

    респектос

  • @user-lg2om6hq8b
    @user-lg2om6hq8b17 күн бұрын

    Последовала совету автора и создавала модели таблиц с использованием User(Base). Кто будет делать так же, если не читали доки, можете столкнуться с проблемой: переменная metadata во-первых не используется, а во-вторых вы не сможете создать БД из-за ошибки. Так вот переменная metadata действительно не нужна в таком коде, так как вы используете декларативный стиль определения моделей с помощью SQLAlchemy ORM, который сам управляет метаданными. Вам нужно вызывать Base.metadata.create_all(engine) вместо metadata.create_all(engine) для создания таблиц.

  • @ashaprinskiy
    @ashaprinskiy10 ай бұрын

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

  • @user-nl2mc5le7o
    @user-nl2mc5le7o Жыл бұрын

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

  • @user-hh3jt4gs2q
    @user-hh3jt4gs2q10 ай бұрын

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

  • @user-yk4qq4nt7o
    @user-yk4qq4nt7o10 ай бұрын

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

  • @user-po5tg2sy1j
    @user-po5tg2sy1j Жыл бұрын

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

  • @memeger89

    @memeger89

    Жыл бұрын

    А ты искал? kzread.info?search_query=fastapi+sqlalchemy+env

  • @BestDron
    @BestDron Жыл бұрын

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

  • @artemshumeiko

    @artemshumeiko

    Жыл бұрын

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

  • @user-pk6nr8yv1b
    @user-pk6nr8yv1b Жыл бұрын

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

  • @artemshumeiko

    @artemshumeiko

    Жыл бұрын

    Спасибо

  • @TheAlexBush
    @TheAlexBush7 ай бұрын

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

  • @artemshumeiko

    @artemshumeiko

    7 ай бұрын

    Спасибо!!

  • @Keriokutori
    @Keriokutori Жыл бұрын

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

  • @denk2k
    @denk2k Жыл бұрын

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

  • @bgs12
    @bgs1210 ай бұрын

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

  • @bugagashenka3680
    @bugagashenka36806 ай бұрын

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

  • @Anthony_Private
    @Anthony_Private Жыл бұрын

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

  • @maxjokar7920
    @maxjokar7920 Жыл бұрын

    Thanks so much for your nice video .👍

  • @bondarden
    @bondarden9 ай бұрын

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

  • @mushroomhead4396
    @mushroomhead4396 Жыл бұрын

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

  • @GRIMEANARCHY
    @GRIMEANARCHY Жыл бұрын

    Ждём новое)

  • @user-yz5ho2jf3q
    @user-yz5ho2jf3q5 ай бұрын

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

  • @balbesina228

    @balbesina228

    2 ай бұрын

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

  • @user-gv4gp8we6u
    @user-gv4gp8we6u Жыл бұрын

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

  • @user-gv4gp8we6u

    @user-gv4gp8we6u

    Жыл бұрын

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

  • @sashass099

    @sashass099

    Жыл бұрын

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

  • @fresh_wind87

    @fresh_wind87

    Жыл бұрын

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

  • @mashafrmrussia
    @mashafrmrussia Жыл бұрын

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

  • @MasterDomai
    @MasterDomai Жыл бұрын

    круто!

  • @sisio4980
    @sisio4980 Жыл бұрын

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

  • @iteospace
    @iteospace11 ай бұрын

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

  • @almaspernshev7370
    @almaspernshev73707 ай бұрын

    Если кому-то интересно, то можете следующим образом объявить модели: 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

    7 ай бұрын

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

  • @user-vc2nf9cv8b

    @user-vc2nf9cv8b

    7 ай бұрын

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

  • @user-vc2nf9cv8b

    @user-vc2nf9cv8b

    7 ай бұрын

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

  • @neyrostar

    @neyrostar

    7 ай бұрын

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

  • @user-vc2nf9cv8b

    @user-vc2nf9cv8b

    7 ай бұрын

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

  • @user-bf6hz5sf9s
    @user-bf6hz5sf9s9 ай бұрын

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

  • @ram_qr
    @ram_qr5 ай бұрын

    super!!!

  • @user-yr8tm1cd1k
    @user-yr8tm1cd1kАй бұрын

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

  • @extendomerc1701
    @extendomerc1701 Жыл бұрын

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

  • @artimovskiy
    @artimovskiy Жыл бұрын

    Артём, подскажите, если не затруднит: в ваших видео встречаются 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

    Жыл бұрын

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

  • @mksmvnv
    @mksmvnv6 ай бұрын

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

  • @Artem-wk1vn
    @Artem-wk1vn Жыл бұрын

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

  • @artemshumeiko

    @artemshumeiko

    Жыл бұрын

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

  • @user-dz6et7mf6l
    @user-dz6et7mf6l Жыл бұрын

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

  • @artemshumeiko

    @artemshumeiko

    Жыл бұрын

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

  • @Levon2005
    @Levon20057 күн бұрын

    Здравствуйте, следовал всем инструкциям на видео и выдало такую ошибку на этапе alembic revision : ValueError: invalid literal for int() with base 10: 'postgres'

  • @ibrahimoglu
    @ibrahimoglu Жыл бұрын

    👍

  • @defend00r
    @defend00r Жыл бұрын

    😃👏

  • @user-zs6oi1bz7t
    @user-zs6oi1bz7t Жыл бұрын

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

  • @artemshumeiko

    @artemshumeiko

    Жыл бұрын

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

  • @alekseyveld7559
    @alekseyveld7559 Жыл бұрын

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

  • @artemshumeiko

    @artemshumeiko

    Жыл бұрын

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

  • @granddndz
    @granddndz Жыл бұрын

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

  • @artemshumeiko

    @artemshumeiko

    Жыл бұрын

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

  • @fedorovalexander9652
    @fedorovalexander9652 Жыл бұрын

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

  • @artemshumeiko

    @artemshumeiko

    Жыл бұрын

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

  • @user-oc7ye5uv6r

    @user-oc7ye5uv6r

    8 ай бұрын

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

  • @neyrostar

    @neyrostar

    7 ай бұрын

    @@user-oc7ye5uv6r не надо

  • @user-dp8yd9vg7w
    @user-dp8yd9vg7w2 ай бұрын

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

  • @kaktotak5834
    @kaktotak5834 Жыл бұрын

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

  • @djdididod9928

    @djdididod9928

    Ай бұрын

    Решил?

  • @denisvolkov4784

    @denisvolkov4784

    Ай бұрын

    @@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

  • @migunovich
    @migunovich Жыл бұрын

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

  • @LorenzoY2J
    @LorenzoY2J Жыл бұрын

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

  • @StepaFomin

    @StepaFomin

    Жыл бұрын

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

  • @fresh_wind87

    @fresh_wind87

    Жыл бұрын

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

  • @user-pw6we8gd1s

    @user-pw6we8gd1s

    Жыл бұрын

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

  • @NoName-bp6uo
    @NoName-bp6uo Жыл бұрын

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

  • @potatoandcoffee

    @potatoandcoffee

    6 ай бұрын

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

  • @wizard1109

    @wizard1109

    25 күн бұрын

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

  • @user-xm5se6yz4y
    @user-xm5se6yz4y Жыл бұрын

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

  • @Borzoff
    @Borzoff Жыл бұрын

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

  • @user-xe3sd6qx6h

    @user-xe3sd6qx6h

    Жыл бұрын

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

  • @fedordostoevskiy4209
    @fedordostoevskiy4209 Жыл бұрын

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

  • @user-eb3tr8kt5n
    @user-eb3tr8kt5n10 ай бұрын

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

  • @neyrostar

    @neyrostar

    7 ай бұрын

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

  • @user-ig3rv1xv5g
    @user-ig3rv1xv5g Жыл бұрын

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

  • @user-le4hm2gs1y

    @user-le4hm2gs1y

    5 ай бұрын

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

  • @cryhyble5750
    @cryhyble57508 ай бұрын

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

  • @artemshumeiko

    @artemshumeiko

    8 ай бұрын

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

  • @arknexter
    @arknexter11 ай бұрын

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

  • @arknexter

    @arknexter

    9 ай бұрын

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

  • @user-vc9ij4su4e
    @user-vc9ij4su4e6 ай бұрын

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

  • @artemshumeiko

    @artemshumeiko

    6 ай бұрын

    хз

  • @stepankokovin7841
    @stepankokovin7841 Жыл бұрын

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

  • @Vladim1r
    @Vladim1r Жыл бұрын

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

  • @artemshumeiko

    @artemshumeiko

    Жыл бұрын

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

  • @shot2420
    @shot2420 Жыл бұрын

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

  • @user-sn5fm2dy8s
    @user-sn5fm2dy8s Жыл бұрын

    При выполнении 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".

  • @povladis6940
    @povladis6940 Жыл бұрын

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

  • @artemshumeiko

    @artemshumeiko

    Жыл бұрын

    ахахаха))

  • @neyrostar
    @neyrostar7 ай бұрын

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

  • @ivankosolapov430

    @ivankosolapov430

    6 ай бұрын

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

  • @user-pd7ok3uw5j
    @user-pd7ok3uw5j2 ай бұрын

    При попытке сделать ревизию выпадает исключение " 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'" Вроде бы всё сделал по видео и импорты не подсвечиваются как ошибка, но не работает. Может кто-то сталкивался с такой проблемой?

  • @stanislaumisko2900
    @stanislaumisko2900 Жыл бұрын

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

  • @artemshumeiko

    @artemshumeiko

    Жыл бұрын

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

  • @user-od2jl5uj6v
    @user-od2jl5uj6v11 ай бұрын

    Добрый вечер, после команды 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

    11 ай бұрын

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

  • @user-od2jl5uj6v

    @user-od2jl5uj6v

    11 ай бұрын

    ​@@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

    11 ай бұрын

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

  • @user-od2jl5uj6v

    @user-od2jl5uj6v

    11 ай бұрын

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

  • @pishy_kommentu

    @pishy_kommentu

    8 ай бұрын

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

  • @JIJI-zv1qp
    @JIJI-zv1qp Жыл бұрын

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

  • @artemshumeiko

    @artemshumeiko

    Жыл бұрын

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

  • @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

  • @mmh7732
    @mmh77322 ай бұрын

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

  • @artemshumeiko

    @artemshumeiko

    2 ай бұрын

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

  • @Notforgotka
    @Notforgotka11 ай бұрын

    Привет, Артем. Очень крутой курс. Но у меня на этом уроке во время 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 при регистрации сервера

  • @Torvalds_
    @Torvalds_2 ай бұрын

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

  • @artemshumeiko

    @artemshumeiko

    2 ай бұрын

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

  • @warflow
    @warflow9 ай бұрын

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

  • @user-yz1uj3kx7b
    @user-yz1uj3kx7b20 күн бұрын

    Привет. После alembic revision --autogenerate -m "Database creation" У меня ошибка UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc2 in position 61: invalid continuation byte. Не могу решить проблему. Может подскажите?

  • @quapic1024

    @quapic1024

    10 күн бұрын

    та же проблема. не нашли решение?

  • @user-rg8hb6zr9k

    @user-rg8hb6zr9k

    20 сағат бұрын

    У меня тоже самое, все делал по видео. Попробовал поменять кодировку файлов или самого Пайшарма внутри, не помогает((. Отметьте пж, когда будет ответ...

  • @user-pl2cx2vm4l
    @user-pl2cx2vm4l9 ай бұрын

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

  • @Qustoos

    @Qustoos

    6 ай бұрын

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

  • @milord3089
    @milord3089 Жыл бұрын

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

  • @artemshumeiko

    @artemshumeiko

    Жыл бұрын

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

  • @farapro8345
    @farapro8345 Жыл бұрын

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

  • @AlexFeynman

    @AlexFeynman

    Жыл бұрын

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

  • @user-bv1fg1uy2z
    @user-bv1fg1uy2z3 ай бұрын

    СРОЧНО!!После команды 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

    3 ай бұрын

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

  • @N-gaga

    @N-gaga

    3 ай бұрын

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

  • @haskelllisp5998
    @haskelllisp5998 Жыл бұрын

    php sheet

  • @user-mz1xl4vr3l
    @user-mz1xl4vr3l Жыл бұрын

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

  • @user-nu3ot7td1j

    @user-nu3ot7td1j

    Ай бұрын

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

  • @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

    Жыл бұрын

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

  • @TheVirtyoz777

    @TheVirtyoz777

    Жыл бұрын

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

  • @uglevod184
    @uglevod1848 ай бұрын

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

  • @Septman
    @SeptmanАй бұрын

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

  • @elshan4011

    @elshan4011

    Ай бұрын

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

  • @barmalejZ
    @barmalejZ7 ай бұрын

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

  • @Dtankhaev
    @Dtankhaev10 ай бұрын

    Пако ты ли это

  • @jcatstreams8550
    @jcatstreams855011 ай бұрын

    Сильно дикое чувство, что весь этот курс ради рекламы своего платного курса, так как создаются таблицы через Base - так пишут уже больше года, но автор почему-то только сейчас об этом узнает и вместо пересоздания видео - просто написать об этом коммент, на ошибки других пользователей 0 ответов kzread.info/dash/bejne/m3uB1MuwgZeefbw.html вот пример +- нормального курса

  • @user-yp2vh6jy7q

    @user-yp2vh6jy7q

    9 ай бұрын

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

  • @a_n_t_o_n_09
    @a_n_t_o_n_097 ай бұрын

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

  • @ChelovekPavuk555
    @ChelovekPavuk55518 күн бұрын

    Елки палки вот это всё придумали ради летающих кнопок для фронтендеров, кошмар, три библиотеки что бы просто юзать базу данных =)

  • @seresno
    @seresno7 ай бұрын

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

  • @alekseigrigorchuk576

    @alekseigrigorchuk576

    6 ай бұрын

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

  • @user-dz6et7mf6l
    @user-dz6et7mf6l Жыл бұрын

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

  • @russul2700

    @russul2700

    Жыл бұрын

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

  • @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'))

  • @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

    Жыл бұрын

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

  • @user-ew7wk5ho2b

    @user-ew7wk5ho2b

    Жыл бұрын

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

  • @Beloslav13

    @Beloslav13

    Жыл бұрын

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