要将模型迁移到数据库,我使用
Flask-Migrate
我希望在不同的数据库模式中执行迁移,但问题是
Flask-Migrate
在迁移之前不查看其他模式
这是我的代码
# app/__init__.py
app = Flask(__name__)
app.config.from_object(os.environ.get('FLASK_ENV'))
db = SQLAlchemy(app)
migrate = Migrate(app, db)
from app import models
# app/models.py
class Bot(db.Model):
__tablename__ = "bot"
__table_args__ = {"schema": "schema_tg_bot"}
id = db.Column(db.Integer, primary_key=True)
token = db.Column(db.String(), unique=True, nullable=False)
name = db.Column(db.String(), nullable=False)
执行命令后
flask db migrate -m "init"
flask db upgrade
在文件夹迁移中创建版本
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.create_table('tg_bot',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('token', sa.String(), nullable=False),
sa.Column('name ', sa.String(), nullable=False),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('token'),
schema='auto_ecommerce_tg_bot'
)
# ### end Alembic commands ###
添加新列后
class Bot(db.Model):
...
type = db.Column(db.String(), nullable=False)
它再次创建相同的文件
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.create_table('tg_bot',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('token', sa.String(), nullable=False),
sa.Column('name', sa.String(), nullable=False),
sa.Column('type', sa.String(), nullable=False),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('token'),
schema='auto_ecommerce_tg_bot'
)
# ### end Alembic commands ###
但是调用
flask db upgrade
时出现错误
sqlalchemy.exc.ProgrammingError: (psycopg2.errors.DuplicateTable) relation "tg_bot" already exists
shop_id INTEGER NOT NULL,
type VARCHAR NOT NULL,
PRIMARY KEY (id),
UNIQUE (shop_id),
UNIQUE (token)
)
如果您不指定方案,那么一切都会正常工作
在文件夹迁移中创建版本
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('tg_bot', schema=None) as batch_op:
batch_op.add_column(sa.Column('type', sa.String(), nullable=False))
# ### end Alembic commands ###
我搜索了图书馆并找到了论点
include_schemas
# app/__init__.py
app = Flask(__name__)
app.config.from_object(os.environ.get('FLASK_ENV'))
db = SQLAlchemy(app)
migrate = Migrate(app, db, include_schemas=True)
from app import models
它对我有帮助,现在文件夹迁移中的版本如下:
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('tg_bot', schema='auto_ecommerce_tg_bot') as batch_op:
batch_op.add_column(sa.Column('type', sa.String(), nullable=False))
# ### end Alembic commands ###