1.首先,创建一个新的文件,比如命名为 database.py,在这个文件中配置数据库和迁移:
# database.py
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
db = SQLAlchemy()
migrate = Migrate()
def create_tables_if_not_exists(app):
"""如果表不存在,则创建表"""
with app.app_context():
db.create_all()
print("Tables created successfully if they didn't exist.")
def init_database(app):
"""初始化数据库和迁移工具,并检查创建表"""
db.init_app(app)
migrate.init_app(app, db)
# 根据需要决定是否调用以下函数
create_tables_if_not_exists(app)
在上面代码中,SQLAlchemy和Migrate的实例先于应用被创建,并且没有直接与应用绑定。之后,我们使用db.init_app(app)和migrate.init_app(app, db)来将它们与Flask应用关联起来。这种方式使得代码结构更清晰,同时也便于在不同的配置或环境中重用数据库和迁移的设置。注意,尽管示例中保留了在create_tables_if_not_exists中创建表的逻辑,实际最佳实践是完全依赖于flask db upgrade命令来管理数据库变更。
如果希望在应用启动时自动检查并创建数据库表(虽然这不是最佳实践,但在某些开发场景下可能会用到),你可以选择性地保留创建表的逻辑。但请记住,生产环境中应当主要依赖数据库迁移来管理表结构的变化。
2.然后,在你的主应用文件中(例如 app.py),引入并使用这个新模块来配置数据库:
# app.py
from flask import Flask
from .database import init_database
app = Flask(__name__)
# 配置数据库连接和其他设置
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# 初始化数据库及检查创建表
init_database(app)
# 定义你的模型、路由等其他应用组件...
if __name__ == '__main__':
app.run(debug=True)
3.安装虚拟环境,安装依赖,运行项目
(1)创建虚拟环境:
python -m venv env
(2)进入虚拟环境并运行:
Windows:
cmd: 进入虚拟环境目录env 运行:Scripts\activate
powershell:进入虚拟环境目录env 运行: .\Scripts\Activate.ps1
mac:source ./env/bin/activate
(3)关闭虚拟环境:
deactivate 各个系统都一个指令
(4)创建requirements文件
pip3 freeze > requirements.txt
(5)安装依赖
pip3 install -r requirements.txt
(6)运行项目
flask run
4.使用Flask-Migrate进行数据库表创建和管理的基本步骤:
-
初始化迁移环境
首先,你需要在项目根目录下初始化迁移环境。这只需要执行一次:flask db init
这会在你的项目中创建一个migrations目录,用于存放迁移脚本。 -
生成迁移脚本
每当你的模型有变动时(比如新增了User模型),你应该生成一个新的迁移脚本:flask db migrate
这个命令会比较你的模型定义和当前数据库的状态,生成一个迁移脚本。 -
应用迁移
最后,应用这个迁移来实际创建或修改数据库表:flask db upgrade
这个命令执行迁移脚本,从而在数据库中创建或更新表结构。