Понимание ошибки
Причина, по которой вы видите эту ошибку, заключается в том, что, как упомянул @moi, ваша модель и база данных не совпадают.
Ваша модель имеет пять атрибутов id
, name
, email
, phone
и date
.Однако в вашей базе данных нет столбца с именем id
в таблице detail
.
Это вызывает ошибку при запросе к базе данных, поскольку SQLAlchemy указывает каждый столбец, к которому она обращается, в операторе SELECT
.Другими словами, он говорит, что хочет получить данные из столбцов id
, name
, email
, phone
и date
.К сожалению, в базе данных нет столбца с именем id
, поэтому она возвращает ошибку.
Вероятно, это вызвано тем, что вы создали модель без id
, а затем добавили ее позже.Таким образом, вы обновили свою модель, а не базу данных.
Как это исправить
Вам необходимо синхронизировать базу данных с вашей моделью.Вам нужно будет выполнить следующие команды с вашего терминала.
Во-первых, установите flask-migrate.
$ pip install Flask-Migrate
Во-вторых, настройте flask-migrate
Прочитайте раздел Пример в документации как минимум для этого. Flask Migrate Docs
В-третьих, настройте папку миграции.
$ flask db init
Если это приводит к ошибке Could not locate a Flask application.
.Вам нужно будет установить переменную окружения FLASK_APP
.Замените run.py
именем вашего приложения Flask.
MacOS / Linux
$ export FLASK_APP=run.py
Windows
$ set FLASK_APP=run.py
В-четвертых, создайте свою первую миграцию.
$ flask db migrate
Как только это будет сделано, вы должны найти новый файл xxxxxxxxxxxx_.py
в вашем каталоге /migrations/versions
.Это файл миграции Alembic.
На данный момент у вас есть три варианта.
Опция 1 : вы можете удалить свою таблицу details
и позволить flask-migrate
создать свежий. Вы потеряете все данные в нем. Затем выполните команду upgrade
.
Опция 2 : вы можете вручную отредактировать новый файл миграции Alembic.Вам нужно будет изменить функцию upgrade()
, чтобы она не пыталась создать новую таблицу details
, поскольку она уже существует, а вместо этого добавляет столбец id
.
Опция 3 : вы можете удалить строку sa.Column("id" sa.Integer()...
из функции upgrade()
, а также любые другие столбцы, отсутствующие в вашей базе данных.Затем вручную создайте таблицу в вашей базе данных с именем alembic_version
с одним первичным ключом VARCHAR
столбец с именем version_num
длиной 32. Затем создайте одну запись в таблице alembic_version
со значением Revision ID
измиграция алемба, созданная выше.Затем снова запустите $ flask db migrate
.Это создаст второй файл версии alembic, который сможет обновить вашу базу данных.
В зависимости от состояния вашего приложения и вашего уровня опыта я бы порекомендовал вариант 1.
В-пятых, обновите вашу базу данных.
$ flask db upgrade
Прочитайте документацию
Я настоятельно рекомендую прочитать документацию как по flask-migrate, так и по Alembic.Flask-migrate - это надежная оболочка для Alembic для аппликаций в колбах.
Документы для переноса колб
Документы Alembic