使用带有声明性基的flask migrate,而不是db.model



我想动态地将列添加到数据库中的表中,因为我不想在类中设置时指定所有列

我已经下载了flask migrate,我已经开始使用db.model了,但我想让它直接使用声明性库。我该怎么做?

这就是我使用db.model 设置它的方式

app = Flask(__name__, static_folder = "static", template_folder = "templates/vue_template")
app.config['SQLALCHEMY_DATABASE_URI'] = "postgresql+psycopg2://user:password@localhost:5432/testdb"
db =SQLAlchemy(app)
class Person(db.Model):
id=db.Column(db.Integer, primary_key=True)
name=db.Column(db.String(80))
username=db.Column(db.String(80))


migrate = Migrate(app,db)
manager = Manager(app)
manager.add_command('db', MigrateCommand)
if __name__ == '__main__':
manager.run()

然后我在终端中运行以下命令

python test.py db init
python test.py db migrate -m "Initial migration."
python test.py db upgrade

如果我在Person表中添加一个新列email = db.Column(db.String(120))并运行

python test.py db migrate -m "Add column"
python test.py db upgrade

然后,我可以在数据库的Person表中看到新列。太棒了

问题
但是如何使用基于declarative_base的表(如下所示(执行相同的列添加过程
I.e使用flask migrate 将列email = Column(String)添加到下表

class Person(Base):
__tablename__ = "person"
id = Column(Integer, primary_key=True)
name=Column(String)
username=Column(String)

我需要对代码进行哪些更改才能使其正常工作?

感谢

Flask Migrate是一个与Flask SQLAlchemy一起工作的扩展。如果不使用Flask SQLAlchemy,则无法使用Flask Migrate。

但是Flask Migrate在引擎盖下使用Alembic,Alembic也可以直接使用。这就是我的建议,只要使用Alembic即可。它需要在配置和设置方面做更多的工作,但它将适用于您的SQLAlchemy项目。

最新更新