Далее нам необходимо выполнить миграции, чтобы эти изменения отразились в базе данных. Для этого откроем файл migrations/env.py и добавим эту новую модель User:
from app.backend.db import Base
from app.models import category, products, user
target_metadata = Base.metadata
Выполним следующую команду, чтобы создать наши миграции:
alembic revision --autogenerate -m "Create User model"
Получим следующий результат:
(.venv) permin0ff@Mac fastapi_ecommerce % alembic revision --autogenerate -m "Create User model"
INFO [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO [alembic.runtime.migration] Will assume transactional DDL.
INFO [alembic.autogenerate.compare] Detected added table 'users'
INFO [alembic.autogenerate.compare] Detected added index ''ix_users_id'' on '('id',)'
INFO [alembic.ddl.postgresql] Detected sequence named 'products_id_seq' as owned by integer column 'products(id)', assuming SERIAL and omitting
INFO [alembic.autogenerate.compare] Detected added column 'products.supplier_id'
INFO [alembic.autogenerate.compare] Detected added foreign key (supplier_id)(id) on table products
Generating /Users/permin0ff/PycharmProjects/FastAPI_beginners/fastapi_ecommerce/app/migrations/versions/d7f76dc3dd94_create_user_model.py ... done
Далее применим наши миграции используя команду:
alembic upgrade head
И получим следующий результат:
(.venv) permin0ff@Mac fastapi_ecommerce % alembic upgrade head
INFO [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO [alembic.runtime.migration] Will assume transactional DDL.
INFO [alembic.runtime.migration] Running upgrade 6c9fbe9d8c67 -> d7f76dc3dd94, Create User model
(.venv) permin0ff@Mac fastapi_ecommerce %
И теперь если мы откроем нашу базу данных, мы увидим следующее ее содержание, имеющую новые связи:
Далее мы создадим Pydantic схему для создания пользователей, для этого в файле schemas.py добавим ее:
class CreateUser(BaseModel):
first_name: str
last_name: str
username: str
email: str
password: str
При создании нового пользователя, мы должны будем передать следующие поля - имя, фамилию, логин, email и пароль.
В следующем шаге приступим к реализации конечной точки создания пользователей.
Коллеги, я застрял, прошу ткнуть меня в нужную сторону...
При попытке миграции получаю ошибку:
Foreign key associated with column 'products.supplier_id' could not find table 'users' with which to generate a foreign key to target column 'id'
Саму таблицу я уже создал без добавления поля supplier_id(после первой ошибки попытался создать таблицу отдельно)
файл user.py в папке models создан
env.py в migrations изменен
в модельках ошибки не вижу
Help =)
@Алексей_Бойко, а файл миграций
*_create_user_model.pyсоздался или нет?@Алексей_Бойко, Файл есть, таблица создаётся:
@Алексей_Бойко, Нашел проблему - почему то в файле app/models/products.py не срабатывала строчка для модели User
from app.models import *Не смотря на то, что файл __init__.py я дополнил (кстати, может стоит добавить это в теорию?)
from .category import Category from .products import Product from .user import UserНо стоило мне на прямую импортировать модель User в файле app/models/products.py
from app.models.user import Userвсё завелось.