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 #разработка #программирование
Я ошибся в видео и хочу попросить вас не использовать Table() для создания моделей таблиц -- только классы, например, class User(Base). Это более предпочтительный и распространенный вариант.
Освой backend разработку на FastAPI с НУЛЯ до выхода в продакшн за 3 месяца: clck.ru/38ZcDP
*🚨 Продажи открыты только до 31 мая 2024 года! 🚨*
Прочитать отзывы к курсу можно на Stepik: clck.ru/38ZdhZ
Так получилось, что в этом видео мы не подключились к базе данных и не сделали ни одного запроса. В следующих двух видео (5 и 6) рассматривается как создать асинхронное подключение (5) и асинхронные запросы к базе (6). Можно ориентироваться по тайм-кодам этих видео. Приятного изучения!
Также был дан плохой совет использовать JSON тип для хранения permissons: 1я НФ чётко говорит не делать так. Понятно что процесс нормализации каждый проводит так глубоко, как хочет, но первые 3 прям важны для избежания аномалий в дальнейшем.
@@captaingree3079 вполне распространенная практика. Зачем тогда json в Postgres? :)
@@artemshumeiko Странный вопрос.. а зачем ООП в postgres? Чтобы было, всегда найдётся специфичный кейс для данной функциональности, за это мы и любим postgres. К примеру, json можно было бы использовать для хранения неких специфичных геопространственных координат, которые нельзя представить другими типами. Или может какие-то данные из монги, где всё хранится в JSONB ... но уж точно не permissions - это ведёт к аномалиям. К примеру вы решите удалить какую-то роль/права полностью. Чтобы это сделать вам придётся распарсить каждую роль и обновить этот JSON - долго. А что если сразу после удаления прилетит запрос который добавит пользователя с этой удалённой ролью? Вот вам и аномалия удаления...
А я только хотел спросить "почему не декларативный подход?" А тут уже и ответ на месте
такие вещи переснимают, а не говорят ,чтобы как попало наугад сам пытался сделать
Возможно кому-то поможет)
В процессе создания сервера столкнулся с такими проблемами:
1) Во вкладке Create не было Server, только ServerGroup. Чтобы "Создать" сервер необходимо было перейти во вкладку Register и там выбрать Server, после чего откроется окно как на видео 1:09.
2) Повторил все действия как и было на видео, но получил ошибку "unable to connect server"
Решение: создаю сервер через вкладку Register -> Server, в поле password вписываю не postgres а свой пароль от pdadmin, который задал при первом входе в программу. Машина заработала ))
Артём, большое спасибо за курс!) Всем удачи в постижении FastAPI и да пребудет с нами сила!)
Спасибо за вашу помощь!
Большое спасибо! Очень помогло!
Дай бог здоровья мил человек!
Спасибо большое!
респектос
Артём, спасибо большое за уроки!! Очень все понятно и просто объясняешь!! Одно удовольствие учить FAST API c твоими уроками))
Спасибо за быстрый гайд по использованию Alembic!
Спасибо тебе огромное за твой труд! Очень полезно!
Отличное видео, объясняешь доходчиво.
Вот-бы про чистую архитектуру ещё посмотреть.
Патерн репозиторий, слой бизнес логики и т.д .
Fastapi отличный фреймворк , но в нём нет ни какой архитектуру. И за этого новичок может создать такой код, волосы потом выдираешь.
Хотя- бы расскажи про разделение route.
Спасибо за отзыв! Про разделение раутов обязательно расскажу. На остальные темы тоже подумаю, что можно рассказать
Благодарю за урок, много полезной информации!
При написании команды: alembic revision --autogenerate -m "Database creation"
выводит ошибку: sqlalchemy.exc.OperationalError: (psycopg2.OperationalError)
*я посмотрел, ошибка связана с тем, что в модуле context нет config
то есть ошибка в этой части кода, как я понимаю: config = context.config
Делал все строго по шагам. Можете сказать, почему возникает такая ошибка?
Нашел в комментах ответ. В .енв в db_pass нужно ввести пароль, который указывали при создании сервера
Если кому-то интересно, то можете следующим образом объявить модели:
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"))
Что такое Base? Откуда его импортировать? В sqlalchemy 2.0 его нет
@@neyrostar
from sqlalchemy.orm import declarative_base
BaseModel = declarative_base()
@@neyrostar А вообще, можно было зайти в доку и найти ответ за... минуты 3 что ли=)
@@user-vc2nf9cv8b Так можно было не писать комментарий тогда, потому что это тоже всё есть в доках.
@@neyrostar Интересные вы люди, кнш)
Я бы спасибо сказал)
Впрочем цинизм - выбор индивидуальный
вот отлично прям показано с переменными из .env Очень грамотно. На ютубе такое не встречал. Спасибо!
А ты искал? th-cam.com/users/results?search_query=fastapi+sqlalchemy+env
Спасибо, что помогаешь нам. Всего тебе лучшего😁👍
Спасибо
Офигенно шикарно объясняешь. Спасибо!
Спасибо!!
Отлично! Новое видео🤗
Мои мысли при просмотре видео: "Почему ты расхваливал FastAPI в первом ролике плейлиста как асинхронный, но все примеры, даже библиотека для работы с постргесом синхронные.....?"
Потом зашел почитать как обычно коменты, и увидел ответ в закрепленном :)
Бегу смотреть дальше!
Артем, спасибо. Может быть уже говорили, но не обязательно прописывать python3.8 перед pip, так как pip вызывается из venv а там он связан с конкретной версией python, с которой этот venv был создан.
Спасибо за уроки!
После выполнения
alembic revision --autogenerate -m "Database creation"
получаю ошибку TypeError: 'property' object is not iterable
Подскажите, что делаю не так? Спасибо!
круто все понятно и просто объяснено
Ты бы хотя бы в гите поменял создания таблиц на основе классов, чтобы весь флоу посмотреть
Thanks so much for your nice video .👍
большое спасибо за серию видосов, сейчас для меня очень актуально. Пожалуйста не останавливайся. Все что касается бэра очень интересно!!!
18:32, Думаю для удобства использовать decouple.
не подскажете я не понимаю почему у вас 21:20 работает import config??
ведь файл config находится на один уровень выше нашего каталога
когда я написал то же самое в своём проекте pycharm не видит файл config
единственный способ это решить это написать from ..config import DB_HOST. Но в таком случае я получаю предупрежедение о относительном импорте
просто не понятно почему у вас это работает
p.s почему то после перезапуска начал просто работать import config (как в видео). Я не знаю как это работает. Очень странно...
Было бы неплохо еще добавить примеры для типовых сценариев использования - создание, выгрузка и модификация агрегатов.
Отличное видео! Была проблема с миграцией, как оказалось проблема была в пароле. Пароль от БД у меня нестандартный😁
Переделал через asyncpg, пока счастлив... Спасибо))
@@user-gv4gp8we6u как реализовал раздачу сессий через asyncpg?) Интересно узнать. Было бы хорошо, если бы скинул источник по которому делал. Знаю, что в случае с asyncpg + sqlalchemy нужно чутка по-другому организовывать. Спасибо
@@sashass099 и он благополучно не ответил чудак на букву м
почему в postgresql при входе в properties таблицы users, выдает сообщение something went wrong?
Ты большой молодец!)
Артём, подскажите, если не затруднит: в ваших видео встречаются 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?
Отличный вопрос! В видео я использовал Table(), не зная о том, что данный способ уже устарел. Сейчас редко можно встретить данный подход при проектировании моделей таблиц на бэкенде. Этот стиль/метод называется классическим или императивным. Более современный, декларативный стиль (через создание класса), используется повсеместно и рекомендуется создателем SQLAlchemy.
Обе структуры можно назвать моделью, ведь они описывают таблицу в базе данных в той или иной форме.
Референс: docs.sqlalchemy.org/en/20/orm/mapping_styles.html
Ждём новое)
Артём, привет! Спасибо за уроки, очень нравятся! Скажи, а зачем Postgres подключать через контейнер?
Привет! Видимо, я привык просто к такому способу; возможно, стоило просто локально развернуть и не усложнять видео.
Из плюсов контейнера, что базу можно развернуть на удобном мне порте (дефолтный 5432 у меня занят под другие задачи), а также что можно быстро ее снести
спасибо. были затыки пытался для асинхроного подключения через Base.create.... сделать падала ошибка. с алембиком все сработало
Супер видео! спасибо! а можно ссылку на проект в гите ? изменение на алхимию вторую будет?
ссылка на гит: github.com/artemonsh/fastapi_course
По второй алхимии обновлять информацию не планирую
Спасибо большое за ваши уроки!!! Можете пожалуйста в будущем сделать видео про авторизацию с ролями, пользователями и jwt токеном ?
В плане курса есть ровно то, о чем вы просите. Ждите :)
Артем, здравствуйте, может поможете. Все делал по вашему уроку, но почему-то в файле env.py не хочет импортироваться данные с файла config и models. Если делать как вы рассказывали, то он просто подчеркивает данные. Если пытаться импортировать как из папки, где лежит файл from fastapiexample.config import DB_HOST, DB_PORT, DB_USER, DB_NAME, DB_PASS, то выдает ошибку отсутствия модуля. С чем может быть проблема? У меня уже не в первый раз проблема с импортом, если я импортирую из разных папок в Pycharm.
Здравствуйте, решили проблему?
@@StepaFomin он даже ответить не может, так ему и надо
@@fresh_wind87 Столкнулся с такой же проблемой. Сможете помочь?
Я прошел урок на Ubuntu и с dbeaver, все гуд. может подсказать, dbeaver это аналог pgAdmin или есть существенная разница?
По моему опыту это аналог
круто!
при попытке миграции выдает следующую ошибку: TypeError: 'property' object is not iterable
При выполнении 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".
Здравствуйте, Артём. Не могу установить posgresql. "Looks like you've followed a broken link or entered a URL that doesn't exist on this site.", как это можно исправить?
Решил?
@@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
Как устранить эту ошибку? Это может быть связано с версией языка?
*FAILED*
*Traceback (most recent call last):*
*File "", line 198, in _run_module_as_main*
*File "", line 88, in _run_code*
сейчас та же проблема, подскажите, может вы уже нашли ее решение?
Перепроверьте в файле alembic.ini переменную sqlalchemy.url. У меня была такая же проблема, оказалось что пропустил знак % в одном месте
Подскажите, а как вообще можно обучать питону, если в нулину не понимаешь такой базовой штуки, как virtualenv?
хз
Добрый вечер, после команды 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'" подскажите, что я делаю не так?
у вас неверно указан адрес базы данных
он должен быть в формате DSN DATABASE_URL=postgres://{user}:{password}@{hostname}:{port}/{database-name}
@@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}'"
@@user-od2jl5uj6v в переменных окружения DB_PORT видимо не является целым числом
@@artemshumeiko , в файле .env у меня вот так прописаны переменные DB_HOST=localhost
DB_PORT=5432
DB_USER=postgres
DB_NAME=postgres
DB_PASS=postgres
Если для вас это не сработало, то попробуйте поменять порт на другой.
Привет! Очень круто объясняешь, лайк+подписка однозначно!
Можешь подсказать, если у меня уже есть БД на PostgreSQL, я могу не создавать классы в fastApi, а просто как бы законектиться к таблицам? Или для миграций обязательно нужно создавать как бы с помощью orm таблицы. как классы?
Если таблицы уже есть, миграции не нужны, можно просто законнектиться к базе. Чтобы работать с базой через алхимию стоит создать модели через классы
@@artemshumeiko Немного не понял. Если у меня уже есть наполненная БД, то мне не надо использовать alembic?
@@user-oc7ye5uv6r не надо
А зечем мы городили весь этот огород с системными переменнными и вытаскиванием оттуда данных если в конечном итоге мы всё равно данные храним в файле .env? Похоже на велосипед
@@pyxcru Это не отменяет велосипеда. Всё равно на прод серверах всё в системных переменных будет в открытом виде. Почему не брать всё сразу из файла .env тогда с помощью библиотеки decouple, например?
При попытке сделать ревизию выпадает исключение
" 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'"
Вроде бы всё сделал по видео и импорты не подсвечиваются как ошибка, но не работает. Может кто-то сталкивался с такой проблемой?
Если кто-то как и я тупит и не понимает, почему не получается создать локальный сервер с бд. Устанавливаете программу MAMP, запускаете на ней локальный сервер и подключаетесь к нему с любой программы для sql. Я использую SQLPro Studio
Помогитееееее ребят когда пишу alembic revision --autogenerate -m 'DataBase configration' то пишет cannot import name 'load_dotenv' from 'dotenv' , уже и переустанавливал и 20 раз писал pip install python-dotenv,не работает уже и с гита репозиторий на комп пушнул но все ровно не работает .
какая у вас версия Python? Случайно не 3.12?
По любым вопросам можете обращаться в Python сообщество: t.me/python_community_rus
Лучше освоить SQLite для курсов, а не Posgres который мало кто может установить и настроить для элементарных запросов. Порой надо будет погружаться на месяц или годы.
Есть такое, вчера закончил курс по докеру проходить, решил начать fastapi - и вот незадача, вроде docker-compose поднимает всё, а как сделать миграции - не понятно, пишет, что где-то пароль неправильный :(
лучше использовать python-dotenv или environs?
Неважно. Что больше нравится)
Есть еще библиотека sqlmodel от создателя FastAPI, она объединяет pydantic модели и sqlalchemy модели
Пока сырая , лучше TortoiseORM
Ты очень круто объясняешь, спасибо
про хэширование неправильно сказано
хэш отличается тем, что его вообще нельзя расшифровать, можно только проверить совпадает ли имеющийся хэш с нашей захэшированной строкой
невозможность дешифровки является главным критерием хэш-функции, помимо минимального количества коллизий
Всё верно. К тому же в хэш паролей принято добавлять ещё "соль"
Артем, большое спасибо за материал! Можешь рассказать про FastApi-users и FastApi-admin?
Привет! Хорошее предложение, я подумаю, как можно включить их в курс
два дня боролся с ошибкой "" появляющиеся при попытке создания сервера в PgAdmin как показано в уроке и как следствие ошибки при при проведении миграций в проекте, решение проблемы: пароль при создании должен совпадать с тем, с которым вы вошли на сервер
У меня та же проблемы была. В файле .env указал свой пароль в DB_PASS и ревизия прошла.
super!!!
хорошо что доку чекал в это время, а там классы вместо тейблов
👍
16:28 Добавляем ASS, ОУ МААААЙ
ахахаха))
alembic revision --autogenerate -m 'Database creation' у меня после ввода команды все падает с ошибками :(
Думал, зайду почитаю как Postgress работает. Попал на курс лекций Российской Postgress Pro по администрированию и dev этой базы данных. 👀Короче её нормально изучить сложнее чем Python! 😂😂😂
😃👏
В файле alembic.ini подключение к БД идет по postgresql. А не правильно ли будет указывать postgresql+asyncpg://%(DB_USER)s... ?
Кто-нибудь сталкивался с такой ошибкой ? DBMS:
Case sensitivity: plain=mixed, delimited=exact
Driver: (ver. , JDBC)
Effective version: PostgreSQL (ver. 0.0)
Подсоединение по адресу localhost:5432 отклонено. Проверьте что хост и порт указаны правильно и что postmaster принимает TCP/IP-подсоединения.
И как ее решить?
СРОЧНО!!После команды alembic revision --autogenerate -m "Database creation" вылазит ошибка UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc2 in position 61: invalid continuation byte. Перрыл весь интернет, ничего не помогает, буду очень признателен
Привет! Разобрался? У меня та же фигня
Была такая проблема, оказалось, что в файле ".env" мой пароль в DB_PASS содержал некорректные знаки для кодировки, типа @ и !, после изменения пароля на просто postgres всё сработало.
Проверьте свои значения на предмет некорректных символов
Артем ты супер, а почему не закрывается сессия после использования
Спасибо! Можете скинуть таймкод, пожалуйста?
@@artemshumeiko не правильно задал вопрос, когда используется with сессия закрывается же автоматический
```
async def get_async_session() -> AsyncGenerator[AsyncSession, None]:
async with async_session_maker() as session:
async with session.begin():
yield session
```
есть ли смысл здесь добавлять 3тью строку
я понял что это строка отвечает за отмену всех предыдущих транзакций с базой в рамках 1 сессий, если одна транзакция c базой в рамках 1 сессий был выполнен не удачно. Это нужен тогда когда вы отправляете запрос на 1 метода а там праисходят несколько транзакций с базой. Например система перевода. Правильно?
except Exception:
await session.rollback()
raise
Артём, спасибо за курс. Очень хорошая подача материала. В этом уроке столкнулся с проблемой. Всё повторял за тобой, установил все зависимости ( кстати неплохо было бы в репозитории на 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 контейнере командой из описания к видео.
Привет, спасибо за отзыв!
К сожалению, я оставил в описании неполную команду для запуска базы данных в контейнере. Прошу извинить. Я поправил код: необходимо добавить к команде параметр p (port) "-p 5432:5432", чтобы можно было подключаться к базе не только из докера, но и с компьютера напрямую (первый порт -- это домашний, его можно задать любым, второй -- дефолтный порт postgres).
requirements.txt сейчас добавлю во все уроки
Такая же проблема, у тебя что нибудь получилось испраивть ?
А чем отличается дефайн моделей через Base и через Metadata, я первый вариант использую, что-то лучше другого, или нет?
На самом деле разницы нету. Есть лишь разница в подходах. Metadata используется при задании таблиц через Table (императивный метод), а Base - при задании через классы (декларативный метод).
Больше инфы тут: docs.sqlalchemy.org/en/14/orm/mapping_styles.html
спасибо за видео
8:50 вы сказали, что json недооценённый тип в sql, но на самом деле этот тип не нужно использовать тк таблицы в реляционных базах данных не должны содержать множества значений - это противоречит 1 нормальной форме отношения и самой идее реляционных баз данных, для множества значений в sql принято использовать ещё одну таблицу, запись в которой будет являться элементом этого множества, например в этом видео лучше сделать отдельную таблицу permissions и связать её с таблицей roles
json давно добавлен в постгрес, его любят и им пользуются. Относитесь к json, как к атомарной единице, тогда с 1НФ все будет в порядке :)
Привет, Артем. Очень крутой курс. Но у меня на этом уроке во время 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 подключать через докер. Может быть в этом и етсть ошибка ?
нужно установить PostgresSQL и прописать login/password при регистрации сервера
плохо видно код, надо было шрифт увеличить
на 14:58 выходит ошибка from sqlalchemy.dialects.postgresql import BIGINT
ModuleNotFoundError: No module named 'sqlalchemy.dialects.postgresql'... Не могу разобраться что не так..
У вас получилось разобраться?
тут возникает ошибка импорта, не импортируется из конфига переменные, вообще странно что не возникает ошибки у Артема, может дело в пайчарме и он прощает такое.
Добавь папку проекта в переменную окружения и оттуда подтягивай все данные.
PROJECT_ROOT = os.path.abspath(os.path.join(
os.path.dirname(__file__),
os.pardir)
)
sys.path.append(PROJECT_ROOT)
обьясняет очень круто, прям все понятно структурировано, кайф, нооооооооооо у тебя есть привычка чавкать или плюскать или слюну глотать, бляяяяя, у меня глаз из за этого дергается хахахахах, понятное дело, особенности челюсти и прочее, но ухо мое постоянно это ловит)
Сорри, микро раньше был плохо настроен :(
Артём, спасибо за материал!
Для меня тут тема докера осталась нераскрытой, да и SQLAlchemy+Alembic довольно увесистая по объёму вещь
Если у тебя есть на примете материал(кроме документации), прикрепи пожалуйста, будет очень полезно
8:50 «очень недооцененный тип json в postgres»
сразу видно чел джун, еще не хапнул с json в postgres
в некоторых кейсах json уместен, но конечно это не панацея
когда следующее видео?
В течение недели
По моему лучше Django пока ещё ничего нет, Я на нем за день поднял интернет магазин, все быстро и посто
сейчас все на fastapi идут, джанго долго изучать
так то норм )
Только нафига такой умное лицо делать при озвучке официальной документации )
товришь диктор )
php sheet
Сильно дикое чувство, что весь этот курс ради рекламы своего платного курса, так как создаются таблицы через Base - так пишут уже больше года, но автор почему-то только сейчас об этом узнает и вместо пересоздания видео - просто написать об этом коммент, на ошибки других пользователей 0 ответов
th-cam.com/video/iGMriwQ48MY/w-d-xo.html вот пример +- нормального курса
а напиши что там был за курс, а то ссылка больше не доступна
БОЖЕ КАК ЖЕ СЛОЖНО ЗДЕСЬ СОЗДАЕТСЯ МИГРАЦИИ ПО СРАВНЕНИЮ С DJANGO, YFFFF
я сам только что посмотрел видос тоже 50 на 50 понял. Но я в первый раз миграции изучаю, думаю дальше с примерами все пойму
Пако ты ли это
Может кому полезно будет. У меня миграции не создавались никак, пока я в терминале базу данных сам не создал с таким именем: 1. sudo -i -u postgres
2. createdb .
можно поподробнее, как именно и в каком порядке
Работаю на OS, не через docker, Ошибка при попытки сделать миграцию conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
sqlalchemy.exc.OperationalError: (psycopg2.OperationalError)
многие сталкиваются с этой проблемой судя по комментариям, есть кто знает как решить эту проблему ?
что-нибудь написано после (psycopg2.OperationalError)? у меня такая ошибка была, оказалось в .env написала просто local вместо localhost
@@xanarchy4761 connection to server at "localhost" (127.0.0.1), port 5432 failed: FATAL: password authentication failed for user "postgres"
вот это еще написано.
Не у меня .env вроде без ошибок
@@russul2700 смени пароль бд на нужный
sudo -u postgres psql
ALTER USER postgres PASSWORD 'password';
В этой команде postgres- имя суперпользователя, 'password' - твой пароль
Работаю на винде, не через docker, Ошибка при попытки сделать миграцию conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
sqlalchemy.exc.OperationalError: (psycopg2.OperationalError)
Решил как то проблему?
@@denisslyusareko9158 неа
@@TheVirtyoz777 поставь данные бд(юсер, хост, пасворд тд..) такие какие у тебя и есть, а не с видео
чё как успехи?))
вывод: все нормальные дядьки работают на линуксе. ставь линукс
Работаю на 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'))