将 flask-migrate 与声明性基础一起使用而不是 db.model
Use flask-migrate with declarative base instead of db.model
我想动态地向数据库中的 table 添加列,因为我不想在 class
中设置时指定所有列
我已经下载了 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
如果我然后添加一个新列 email = db.Column(db.String(120))
到 Person table 和 运行
python test.py db migrate -m "Add column"
python test.py db upgrade
然后我可以在数据库中的 Person table 中看到新列。太好了。
问题
但是我怎样才能使用基于 declarative_base 的 table 进行相同的列添加过程(如下所示)
即使用 flask-migrate
将列 email = Column(String)
添加到下面的 table
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 项目。
我想动态地向数据库中的 table 添加列,因为我不想在 class
中设置时指定所有列我已经下载了 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
如果我然后添加一个新列 email = db.Column(db.String(120))
到 Person table 和 运行
python test.py db migrate -m "Add column"
python test.py db upgrade
然后我可以在数据库中的 Person table 中看到新列。太好了。
问题
但是我怎样才能使用基于 declarative_base 的 table 进行相同的列添加过程(如下所示)
即使用 flask-migrate
email = Column(String)
添加到下面的 table
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 项目。