@RaymanPy

Flask-Migrate не видит изменений в БД?

Допустим я изменяю параметр price с db.Float на db.Integer
После чего хочу выполнить миграцию бд
Но как видите alembic изменений в бд не видит
БД: Heroku Postgres
flask db migrate
INFO  [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO  [alembic.runtime.migration] Will assume transactional DDL.
INFO  [alembic.ddl.postgresql] Detected sequence named 'phone_id_seq' as owned by integer column 'phone(id)', assuming SERIAL and omitting
INFO  [alembic.env] No changes in schema detected.


__init__.py
from flask import Flask
from config import Config
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

app = Flask(__name__)
app.config.from_object(Config)
db = SQLAlchemy(app)

migrate = Migrate(app,db)


from app import routes,models


models.py
class Phone(db.Model):

	id = db.Column(db.Integer,primary_key=True)
	name = db.Column(db.String)
	value = db.Column(db.Float,default=0)
	price = db.Column(db.Float,default=0)
	percent = db.Column(db.Integer,default=0)
	weight = db.Column(db.Float,default=0)
	tarif = db.Column(db.Float,default=0)
	other = db.Column(db.Float,default=0)
	course_dollar = db.Column(db.Float,default=0)

	def __init__(self,name):
		self.name = name


	def __repr__(self):
		return f'<name {self.name}>'
  • Вопрос задан
  • 2226 просмотров
Пригласить эксперта
Ответы на вопрос 1
@domanskiy
Попробуй
stamp head
migrate
upgrade

Более радикальный вариант.
В доках указано что compare_type по дефолту False. Изза этого Auto Generating Migrations не "видит" изменений в типах колонок.
Как я это победил.

В папке migrations в файле env.py меняем функцию def run_migrations_online():
Вариант 1
compare_type = True
with connectable.connect() as connection:
        context.configure(
            connection=connection,
            target_metadata=target_metadata,
            process_revision_directives=process_revision_directives,
            **current_app.extensions['migrate'].configure_args,
            # compare_type=True
            compare_type=my_compare_type


Вариант 2
Добавляем к параметру функцию my_compare_type в run_migrations_online

def my_compare_type(context, inspected_column,
                        metadata_column, inspected_type, metadata_type):
        # return False if the metadata_type is the same as the inspected_type
        # or None to allow the default implementation to compare these
        # types. a return value of True means the two types do not
        # match and should result in a type change operation.
        return None


    with connectable.connect() as connection:
        context.configure(
            connection=connection,
            target_metadata=target_metadata,
            process_revision_directives=process_revision_directives,
            **current_app.extensions['migrate'].configure_args,
            compare_type=my_compare_type

        )


Далее
manage.py db migrate -m "Initial migration."
Затем manage.py db upgrade
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы