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
💡 Попробуй онлайн-тренажёр для подготовки к техническому собеседованию: clck.ru/3B5gwP 💡 Забирай роадмап изучения самого востребованного фреймворка на Python - FastAPI здесь: t.me/ArtemShumeikoBot Я ошибся в видео и хочу попросить вас не использовать Table() для создания моделей таблиц -- только классы, например, class User(Base). Это более предпочтительный и распространенный вариант. Так получилось, что в этом видео мы не подключились к базе данных и не сделали ни одного запроса. В следующих двух видео (5 и 6) рассматривается как создать асинхронное подключение (5) и асинхронные запросы к базе (6). Можно ориентироваться по тайм-кодам этих видео. Приятного изучения!
@captaingree3079
Жыл бұрын
Также был дан плохой совет использовать JSON тип для хранения permissons: 1я НФ чётко говорит не делать так. Понятно что процесс нормализации каждый проводит так глубоко, как хочет, но первые 3 прям важны для избежания аномалий в дальнейшем.
@artemshumeiko
Жыл бұрын
@@captaingree3079 вполне распространенная практика. Зачем тогда json в Postgres? :)
@captaingree3079
Жыл бұрын
@@artemshumeiko Странный вопрос.. а зачем ООП в postgres? Чтобы было, всегда найдётся специфичный кейс для данной функциональности, за это мы и любим postgres. К примеру, json можно было бы использовать для хранения неких специфичных геопространственных координат, которые нельзя представить другими типами. Или может какие-то данные из монги, где всё хранится в JSONB ... но уж точно не permissions - это ведёт к аномалиям. К примеру вы решите удалить какую-то роль/права полностью. Чтобы это сделать вам придётся распарсить каждую роль и обновить этот JSON - долго. А что если сразу после удаления прилетит запрос который добавит пользователя с этой удалённой ролью? Вот вам и аномалия удаления...
@user-bf2iw8id4v
Жыл бұрын
А я только хотел спросить "почему не декларативный подход?" А тут уже и ответ на месте
@fresh_wind87
Жыл бұрын
такие вещи переснимают, а не говорят ,чтобы как попало наугад сам пытался сделать
Возможно кому-то поможет) В процессе создания сервера столкнулся с такими проблемами: 1) Во вкладке Create не было Server, только ServerGroup. Чтобы "Создать" сервер необходимо было перейти во вкладку Register и там выбрать Server, после чего откроется окно как на видео 1:09. 2) Повторил все действия как и было на видео, но получил ошибку "unable to connect server" Решение: создаю сервер через вкладку Register -> Server, в поле password вписываю не postgres а свой пароль от pdadmin, который задал при первом входе в программу. Машина заработала )) Артём, большое спасибо за курс!) Всем удачи в постижении FastAPI и да пребудет с нами сила!)
@artemshumeiko
Жыл бұрын
Спасибо за вашу помощь!
@user-jo8ie6ye2m
Жыл бұрын
Большое спасибо! Очень помогло!
@user-ig3rv1xv5g
Жыл бұрын
Дай бог здоровья мил человек!
@fresh_wind87
Жыл бұрын
Спасибо большое!
@PavelNebo
11 ай бұрын
респектос
Последовала совету автора и создавала модели таблиц с использованием User(Base). Кто будет делать так же, если не читали доки, можете столкнуться с проблемой: переменная metadata во-первых не используется, а во-вторых вы не сможете создать БД из-за ошибки. Так вот переменная metadata действительно не нужна в таком коде, так как вы используете декларативный стиль определения моделей с помощью SQLAlchemy ORM, который сам управляет метаданными. Вам нужно вызывать Base.metadata.create_all(engine) вместо metadata.create_all(engine) для создания таблиц.
Спасибо за быстрый гайд по использованию Alembic!
Артём, спасибо большое за уроки!! Очень все понятно и просто объясняешь!! Одно удовольствие учить FAST API c твоими уроками))
Спасибо тебе огромное за твой труд! Очень полезно!
Благодарю за урок, много полезной информации!
вот отлично прям показано с переменными из .env Очень грамотно. На ютубе такое не встречал. Спасибо!
@memeger89
Жыл бұрын
А ты искал? kzread.info?search_query=fastapi+sqlalchemy+env
Отличное видео, объясняешь доходчиво. Вот-бы про чистую архитектуру ещё посмотреть. Патерн репозиторий, слой бизнес логики и т.д . Fastapi отличный фреймворк , но в нём нет ни какой архитектуру. И за этого новичок может создать такой код, волосы потом выдираешь. Хотя- бы расскажи про разделение route.
@artemshumeiko
Жыл бұрын
Спасибо за отзыв! Про разделение раутов обязательно расскажу. На остальные темы тоже подумаю, что можно рассказать
Спасибо, что помогаешь нам. Всего тебе лучшего😁👍
@artemshumeiko
Жыл бұрын
Спасибо
Офигенно шикарно объясняешь. Спасибо!
@artemshumeiko
7 ай бұрын
Спасибо!!
большое спасибо за серию видосов, сейчас для меня очень актуально. Пожалуйста не останавливайся. Все что касается бэра очень интересно!!!
Отлично! Новое видео🤗
круто все понятно и просто объяснено
Мои мысли при просмотре видео: "Почему ты расхваливал FastAPI в первом ролике плейлиста как асинхронный, но все примеры, даже библиотека для работы с постргесом синхронные.....?" Потом зашел почитать как обычно коменты, и увидел ответ в закрепленном :) Бегу смотреть дальше!
Ты большой молодец!)
Thanks so much for your nice video .👍
Артем, спасибо. Может быть уже говорили, но не обязательно прописывать python3.8 перед pip, так как pip вызывается из venv а там он связан с конкретной версией python, с которой этот venv был создан.
Ты очень круто объясняешь, спасибо
Ждём новое)
При написании команды: alembic revision --autogenerate -m "Database creation" выводит ошибку: sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) *я посмотрел, ошибка связана с тем, что в модуле context нет config то есть ошибка в этой части кода, как я понимаю: config = context.config Делал все строго по шагам. Можете сказать, почему возникает такая ошибка?
@balbesina228
2 ай бұрын
Нашел в комментах ответ. В .енв в db_pass нужно ввести пароль, который указывали при создании сервера
Отличное видео! Была проблема с миграцией, как оказалось проблема была в пароле. Пароль от БД у меня нестандартный😁
@user-gv4gp8we6u
Жыл бұрын
Переделал через asyncpg, пока счастлив... Спасибо))
@sashass099
Жыл бұрын
@@user-gv4gp8we6u как реализовал раздачу сессий через asyncpg?) Интересно узнать. Было бы хорошо, если бы скинул источник по которому делал. Знаю, что в случае с asyncpg + sqlalchemy нужно чутка по-другому организовывать. Спасибо
@fresh_wind87
Жыл бұрын
@@sashass099 и он благополучно не ответил чудак на букву м
Спасибо за уроки! После выполнения alembic revision --autogenerate -m "Database creation" получаю ошибку TypeError: 'property' object is not iterable Подскажите, что делаю не так? Спасибо!
круто!
Ты бы хотя бы в гите поменял создания таблиц на основе классов, чтобы весь флоу посмотреть
Было бы неплохо еще добавить примеры для типовых сценариев использования - создание, выгрузка и модификация агрегатов.
Если кому-то интересно, то можете следующим образом объявить модели: 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
7 ай бұрын
Что такое Base? Откуда его импортировать? В sqlalchemy 2.0 его нет
@user-vc2nf9cv8b
7 ай бұрын
@@neyrostar from sqlalchemy.orm import declarative_base BaseModel = declarative_base()
@user-vc2nf9cv8b
7 ай бұрын
@@neyrostar А вообще, можно было зайти в доку и найти ответ за... минуты 3 что ли=)
@neyrostar
7 ай бұрын
@@user-vc2nf9cv8b Так можно было не писать комментарий тогда, потому что это тоже всё есть в доках.
@user-vc2nf9cv8b
7 ай бұрын
@@neyrostar Интересные вы люди, кнш) Я бы спасибо сказал) Впрочем цинизм - выбор индивидуальный
не подскажете я не понимаю почему у вас 21:20 работает import config?? ведь файл config находится на один уровень выше нашего каталога когда я написал то же самое в своём проекте pycharm не видит файл config единственный способ это решить это написать from ..config import DB_HOST. Но в таком случае я получаю предупрежедение о относительном импорте просто не понятно почему у вас это работает p.s почему то после перезапуска начал просто работать import config (как в видео). Я не знаю как это работает. Очень странно...
super!!!
18:32, Думаю для удобства использовать decouple.
спасибо. были затыки пытался для асинхроного подключения через Base.create.... сделать падала ошибка. с алембиком все сработало
Артём, подскажите, если не затруднит: в ваших видео встречаются 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
Жыл бұрын
Отличный вопрос! В видео я использовал Table(), не зная о том, что данный способ уже устарел. Сейчас редко можно встретить данный подход при проектировании моделей таблиц на бэкенде. Этот стиль/метод называется классическим или императивным. Более современный, декларативный стиль (через создание класса), используется повсеместно и рекомендуется создателем SQLAlchemy. Обе структуры можно назвать моделью, ведь они описывают таблицу в базе данных в той или иной форме. Референс: docs.sqlalchemy.org/en/20/orm/mapping_styles.html
почему в postgresql при входе в properties таблицы users, выдает сообщение something went wrong?
Спасибо большое за ваши уроки!!! Можете пожалуйста в будущем сделать видео про авторизацию с ролями, пользователями и jwt токеном ?
@artemshumeiko
Жыл бұрын
В плане курса есть ровно то, о чем вы просите. Ждите :)
Артём, привет! Спасибо за уроки, очень нравятся! Скажи, а зачем Postgres подключать через контейнер?
@artemshumeiko
Жыл бұрын
Привет! Видимо, я привык просто к такому способу; возможно, стоило просто локально развернуть и не усложнять видео. Из плюсов контейнера, что базу можно развернуть на удобном мне порте (дефолтный 5432 у меня занят под другие задачи), а также что можно быстро ее снести
Здравствуйте, следовал всем инструкциям на видео и выдало такую ошибку на этапе alembic revision : ValueError: invalid literal for int() with base 10: 'postgres'
👍
😃👏
Супер видео! спасибо! а можно ссылку на проект в гите ? изменение на алхимию вторую будет?
@artemshumeiko
Жыл бұрын
ссылка на гит: github.com/artemonsh/fastapi_course По второй алхимии обновлять информацию не планирую
Артем, большое спасибо за материал! Можешь рассказать про FastApi-users и FastApi-admin?
@artemshumeiko
Жыл бұрын
Привет! Хорошее предложение, я подумаю, как можно включить их в курс
Я прошел урок на Ubuntu и с dbeaver, все гуд. может подсказать, dbeaver это аналог pgAdmin или есть существенная разница?
@artemshumeiko
Жыл бұрын
По моему опыту это аналог
Привет! Очень круто объясняешь, лайк+подписка однозначно! Можешь подсказать, если у меня уже есть БД на PostgreSQL, я могу не создавать классы в fastApi, а просто как бы законектиться к таблицам? Или для миграций обязательно нужно создавать как бы с помощью orm таблицы. как классы?
@artemshumeiko
Жыл бұрын
Если таблицы уже есть, миграции не нужны, можно просто законнектиться к базе. Чтобы работать с базой через алхимию стоит создать модели через классы
@user-oc7ye5uv6r
8 ай бұрын
@@artemshumeiko Немного не понял. Если у меня уже есть наполненная БД, то мне не надо использовать alembic?
@neyrostar
7 ай бұрын
@@user-oc7ye5uv6r не надо
хорошо что доку чекал в это время, а там классы вместо тейблов
Здравствуйте, Артём. Не могу установить posgresql. "Looks like you've followed a broken link or entered a URL that doesn't exist on this site.", как это можно исправить?
@djdididod9928
Ай бұрын
Решил?
@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
Если кто-то как и я тупит и не понимает, почему не получается создать локальный сервер с бд. Устанавливаете программу MAMP, запускаете на ней локальный сервер и подключаетесь к нему с любой программы для sql. Я использую SQLPro Studio
Артем, здравствуйте, может поможете. Все делал по вашему уроку, но почему-то в файле env.py не хочет импортироваться данные с файла config и models. Если делать как вы рассказывали, то он просто подчеркивает данные. Если пытаться импортировать как из папки, где лежит файл from fastapiexample.config import DB_HOST, DB_PORT, DB_USER, DB_NAME, DB_PASS, то выдает ошибку отсутствия модуля. С чем может быть проблема? У меня уже не в первый раз проблема с импортом, если я импортирую из разных папок в Pycharm.
@StepaFomin
Жыл бұрын
Здравствуйте, решили проблему?
@fresh_wind87
Жыл бұрын
@@StepaFomin он даже ответить не может, так ему и надо
@user-pw6we8gd1s
Жыл бұрын
@@fresh_wind87 Столкнулся с такой же проблемой. Сможете помочь?
Как устранить эту ошибку? Это может быть связано с версией языка? *FAILED* *Traceback (most recent call last):* *File "", line 198, in _run_module_as_main* *File "", line 88, in _run_code*
@potatoandcoffee
6 ай бұрын
сейчас та же проблема, подскажите, может вы уже нашли ее решение?
@wizard1109
25 күн бұрын
Перепроверьте в файле alembic.ini переменную sqlalchemy.url. У меня была такая же проблема, оказалось что пропустил знак % в одном месте
при попытке миграции выдает следующую ошибку: TypeError: 'property' object is not iterable
Есть еще библиотека sqlmodel от создателя FastAPI, она объединяет pydantic модели и sqlalchemy модели
@user-xe3sd6qx6h
Жыл бұрын
Пока сырая , лучше TortoiseORM
Думал, зайду почитаю как Postgress работает. Попал на курс лекций Российской Postgress Pro по администрированию и dev этой базы данных. 👀Короче её нормально изучить сложнее чем Python! 😂😂😂
про хэширование неправильно сказано хэш отличается тем, что его вообще нельзя расшифровать, можно только проверить совпадает ли имеющийся хэш с нашей захэшированной строкой невозможность дешифровки является главным критерием хэш-функции, помимо минимального количества коллизий
@neyrostar
7 ай бұрын
Всё верно. К тому же в хэш паролей принято добавлять ещё "соль"
два дня боролся с ошибкой "" появляющиеся при попытке создания сервера в PgAdmin как показано в уроке и как следствие ошибки при при проведении миграций в проекте, решение проблемы: пароль при создании должен совпадать с тем, с которым вы вошли на сервер
@user-le4hm2gs1y
5 ай бұрын
У меня та же проблемы была. В файле .env указал свой пароль в DB_PASS и ревизия прошла.
лучше использовать python-dotenv или environs?
@artemshumeiko
8 ай бұрын
Неважно. Что больше нравится)
А зечем мы городили весь этот огород с системными переменнными и вытаскиванием оттуда данных если в конечном итоге мы всё равно данные храним в файле .env? Похоже на велосипед
@arknexter
9 ай бұрын
@pyxcru Это не отменяет велосипеда. Всё равно на прод серверах всё в системных переменных будет в открытом виде. Почему не брать всё сразу из файла .env тогда с помощью библиотеки decouple, например?
Подскажите, а как вообще можно обучать питону, если в нулину не понимаешь такой базовой штуки, как virtualenv?
@artemshumeiko
6 ай бұрын
хз
Артём, спасибо за материал! Для меня тут тема докера осталась нераскрытой, да и SQLAlchemy+Alembic довольно увесистая по объёму вещь Если у тебя есть на примете материал(кроме документации), прикрепи пожалуйста, будет очень полезно
спасибо за видео 8:50 вы сказали, что json недооценённый тип в sql, но на самом деле этот тип не нужно использовать тк таблицы в реляционных базах данных не должны содержать множества значений - это противоречит 1 нормальной форме отношения и самой идее реляционных баз данных, для множества значений в sql принято использовать ещё одну таблицу, запись в которой будет являться элементом этого множества, например в этом видео лучше сделать отдельную таблицу permissions и связать её с таблицей roles
@artemshumeiko
Жыл бұрын
json давно добавлен в постгрес, его любят и им пользуются. Относитесь к json, как к атомарной единице, тогда с 1НФ все будет в порядке :)
Кто-нибудь сталкивался с такой ошибкой ? 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 "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".
16:28 Добавляем ASS, ОУ МААААЙ
@artemshumeiko
Жыл бұрын
ахахаха))
Лучше освоить SQLite для курсов, а не Posgres который мало кто может установить и настроить для элементарных запросов. Порой надо будет погружаться на месяц или годы.
@ivankosolapov430
6 ай бұрын
Есть такое, вчера закончил курс по докеру проходить, решил начать fastapi - и вот незадача, вроде docker-compose поднимает всё, а как сделать миграции - не понятно, пишет, что где-то пароль неправильный :(
При попытке сделать ревизию выпадает исключение " 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'" Вроде бы всё сделал по видео и импорты не подсвечиваются как ошибка, но не работает. Может кто-то сталкивался с такой проблемой?
А чем отличается дефайн моделей через Base и через Metadata, я первый вариант использую, что-то лучше другого, или нет?
@artemshumeiko
Жыл бұрын
На самом деле разницы нету. Есть лишь разница в подходах. Metadata используется при задании таблиц через Table (императивный метод), а Base - при задании через классы (декларативный метод). Больше инфы тут: docs.sqlalchemy.org/en/14/orm/mapping_styles.html
Добрый вечер, после команды 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
11 ай бұрын
у вас неверно указан адрес базы данных он должен быть в формате DSN DATABASE_URL=postgres://{user}:{password}@{hostname}:{port}/{database-name}
@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
11 ай бұрын
@@user-od2jl5uj6v в переменных окружения DB_PORT видимо не является целым числом
@user-od2jl5uj6v
11 ай бұрын
@@artemshumeiko , в файле .env у меня вот так прописаны переменные DB_HOST=localhost DB_PORT=5432 DB_USER=postgres DB_NAME=postgres DB_PASS=postgres
@pishy_kommentu
8 ай бұрын
Если для вас это не сработало, то попробуйте поменять порт на другой.
Артем ты супер, а почему не закрывается сессия после использования
@artemshumeiko
Жыл бұрын
Спасибо! Можете скинуть таймкод, пожалуйста?
@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
Жыл бұрын
я понял что это строка отвечает за отмену всех предыдущих транзакций с базой в рамках 1 сессий, если одна транзакция c базой в рамках 1 сессий был выполнен не удачно. Это нужен тогда когда вы отправляете запрос на 1 метода а там праисходят несколько транзакций с базой. Например система перевода. Правильно?
@JIJI-zv1qp
Жыл бұрын
except Exception: await session.rollback() raise
Помогитееееее ребят когда пишу alembic revision --autogenerate -m 'DataBase configration' то пишет cannot import name 'load_dotenv' from 'dotenv' , уже и переустанавливал и 20 раз писал pip install python-dotenv,не работает уже и с гита репозиторий на комп пушнул но все ровно не работает .
@artemshumeiko
2 ай бұрын
какая у вас версия Python? Случайно не 3.12? По любым вопросам можете обращаться в Python сообщество: t.me/python_community_rus
Привет, Артем. Очень крутой курс. Но у меня на этом уроке во время 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
9 ай бұрын
нужно установить PostgresSQL и прописать login/password при регистрации сервера
обьясняет очень круто, прям все понятно структурировано, кайф, нооооооооооо у тебя есть привычка чавкать или плюскать или слюну глотать, бляяяяя, у меня глаз из за этого дергается хахахахах, понятное дело, особенности челюсти и прочее, но ухо мое постоянно это ловит)
@artemshumeiko
2 ай бұрын
Сорри, микро раньше был плохо настроен :(
плохо видно код, надо было шрифт увеличить
Привет. После alembic revision --autogenerate -m "Database creation" У меня ошибка UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc2 in position 61: invalid continuation byte. Не могу решить проблему. Может подскажите?
@quapic1024
10 күн бұрын
та же проблема. не нашли решение?
@user-rg8hb6zr9k
20 сағат бұрын
У меня тоже самое, все делал по видео. Попробовал поменять кодировку файлов или самого Пайшарма внутри, не помогает((. Отметьте пж, когда будет ответ...
тут возникает ошибка импорта, не импортируется из конфига переменные, вообще странно что не возникает ошибки у Артема, может дело в пайчарме и он прощает такое.
@Qustoos
6 ай бұрын
Добавь папку проекта в переменную окружения и оттуда подтягивай все данные. PROJECT_ROOT = os.path.abspath(os.path.join( os.path.dirname(__file__), os.pardir) ) sys.path.append(PROJECT_ROOT)
когда следующее видео?
@artemshumeiko
Жыл бұрын
В течение недели
8:50 «очень недооцененный тип json в postgres» сразу видно чел джун, еще не хапнул с json в postgres
@AlexFeynman
Жыл бұрын
в некоторых кейсах json уместен, но конечно это не панацея
СРОЧНО!!После команды alembic revision --autogenerate -m "Database creation" вылазит ошибка UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc2 in position 61: invalid continuation byte. Перрыл весь интернет, ничего не помогает, буду очень признателен
@user-sc9cx8ke8m
3 ай бұрын
Привет! Разобрался? У меня та же фигня
@N-gaga
3 ай бұрын
Была такая проблема, оказалось, что в файле ".env" мой пароль в DB_PASS содержал некорректные знаки для кодировки, типа @ и !, после изменения пароля на просто postgres всё сработало. Проверьте свои значения на предмет некорректных символов
php sheet
По моему лучше Django пока ещё ничего нет, Я на нем за день поднял интернет магазин, все быстро и посто
@user-nu3ot7td1j
Ай бұрын
сейчас все на fastapi идут, джанго долго изучать
Артём, спасибо за курс. Очень хорошая подача материала. В этом уроке столкнулся с проблемой. Всё повторял за тобой, установил все зависимости ( кстати неплохо было бы в репозитории на 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
Жыл бұрын
Привет, спасибо за отзыв! К сожалению, я оставил в описании неполную команду для запуска базы данных в контейнере. Прошу извинить. Я поправил код: необходимо добавить к команде параметр p (port) "-p 5432:5432", чтобы можно было подключаться к базе не только из докера, но и с компьютера напрямую (первый порт -- это домашний, его можно задать любым, второй -- дефолтный порт postgres). requirements.txt сейчас добавлю во все уроки
@TheVirtyoz777
Жыл бұрын
Такая же проблема, у тебя что нибудь получилось испраивть ?
так то норм ) Только нафига такой умное лицо делать при озвучке официальной документации ) товришь диктор )
БОЖЕ КАК ЖЕ СЛОЖНО ЗДЕСЬ СОЗДАЕТСЯ МИГРАЦИИ ПО СРАВНЕНИЮ С DJANGO, YFFFF
@elshan4011
Ай бұрын
я сам только что посмотрел видос тоже 50 на 50 понял. Но я в первый раз миграции изучаю, думаю дальше с примерами все пойму
В файле alembic.ini подключение к БД идет по postgresql. А не правильно ли будет указывать postgresql+asyncpg://%(DB_USER)s... ?
Пако ты ли это
Сильно дикое чувство, что весь этот курс ради рекламы своего платного курса, так как создаются таблицы через Base - так пишут уже больше года, но автор почему-то только сейчас об этом узнает и вместо пересоздания видео - просто написать об этом коммент, на ошибки других пользователей 0 ответов kzread.info/dash/bejne/m3uB1MuwgZeefbw.html вот пример +- нормального курса
@user-yp2vh6jy7q
9 ай бұрын
а напиши что там был за курс, а то ссылка больше не доступна
alembic revision --autogenerate -m 'Database creation' у меня после ввода команды все падает с ошибками :(
Елки палки вот это всё придумали ради летающих кнопок для фронтендеров, кошмар, три библиотеки что бы просто юзать базу данных =)
на 14:58 выходит ошибка from sqlalchemy.dialects.postgresql import BIGINT ModuleNotFoundError: No module named 'sqlalchemy.dialects.postgresql'... Не могу разобраться что не так..
@alekseigrigorchuk576
6 ай бұрын
У вас получилось разобраться?
Может кому полезно будет. У меня миграции не создавались никак, пока я в терминале базу данных сам не создал с таким именем: 1. sudo -i -u postgres 2. createdb .
@russul2700
Жыл бұрын
можно поподробнее, как именно и в каком порядке
Работаю на 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'))
Работаю на OS, не через docker, Ошибка при попытки сделать миграцию conn = _connect(dsn, connection_factory=connection_factory, **kwasync) sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) многие сталкиваются с этой проблемой судя по комментариям, есть кто знает как решить эту проблему ?
@xanarchy4761
Жыл бұрын
что-нибудь написано после (psycopg2.OperationalError)? у меня такая ошибка была, оказалось в .env написала просто local вместо localhost
@russul2700
Жыл бұрын
@@xanarchy4761 connection to server at "localhost" (127.0.0.1), port 5432 failed: FATAL: password authentication failed for user "postgres" вот это еще написано. Не у меня .env вроде без ошибок
@user-mn7ty7dr4f
Жыл бұрын
@@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
Жыл бұрын
@@denisslyusareko9158 неа
@denisslyusareko9158
Жыл бұрын
@@TheVirtyoz777 поставь данные бд(юсер, хост, пасворд тд..) такие какие у тебя и есть, а не с видео
@user-ew7wk5ho2b
Жыл бұрын
чё как успехи?))
@Beloslav13
Жыл бұрын
вывод: все нормальные дядьки работают на линуксе. ставь линукс