当前位置: 首页 > news >正文

如何在开发与生产环境中应用 Flask 进行数据库管理:以 SQLAlchemy 和 Flask-Migrate 为例

在使用 Flask 进行开发时,数据库管理是一个至关重要的环节。借助 SQLAlchemy 作为 ORM(对象关系映射)工具和 Flask-Migrate 进行数据库迁移,开发者可以高效地进行数据库管理,并在不同的环境(如开发环境和生产环境)中灵活处理数据库的升级和维护。

本文将介绍如何在 开发环境生产环境 中分别配置和使用 Flask 进行数据库管理。


1. 环境介绍

  • SQLAlchemy:Flask 的 ORM 工具,允许开发者通过 Python 对象与数据库交互,而不需要直接编写 SQL。
  • Flask-Migrate:基于 Alembic 的数据库迁移工具,帮助开发者管理数据库结构的变更。

2. 开发环境中的应用

2.1 项目结构

在开发环境中,项目结构的清晰性和可维护性至关重要。一个典型的 Flask 项目结构如下:

flask_app_a/
│
├── .github/
│   └── workflows/
│       └── main.yml               # GitHub Actions 的工作流配置
│
├── migrations/                    # 数据库迁移相关文件
│   ├── versions/
│   ├── env.py
│   ├── README
│   └── script.py.mako
│
├── models/                        # 数据模型
│   ├── __init__.py
│   └── user.py                    # 各种模型文件
│
├── static/
├── templates/
├── venv/
│
├── app.py                         # Flask 应用入口
├── db.py                          # 数据库初始化逻辑
├── config.py                      # 配置文件
├── Dockerfile
├── gunicorn.conf.py
├── logging_config.py
├── rabbitmq_consumer.py
└── requirements.txt
2.2 配置文件

为方便管理不同的配置环境,通常会创建一个 config.py 文件,来处理开发、测试、生产等不同环境下的配置。

# config.pyimport osclass Config:SQLALCHEMY_TRACK_MODIFICATIONS = FalseSECRET_KEY = os.environ.get('SECRET_KEY') or 'your_secret_key'class DevelopmentConfig(Config):SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(os.getcwd(), 'dev.db')class ProductionConfig(Config):SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:password@host:3306/database?charset=utf8mb4'config = {'development': DevelopmentConfig,'production': ProductionConfig,
}
2.3 初始化数据库

通过 db.py 初始化 SQLAlchemy 和 Flask-Migrate:

from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migratedb = SQLAlchemy()def init_db(app):# 配置 SQLAlchemy 和数据库迁移db.init_app(app)Migrate(app, db)
2.4 创建模型

将模型放在 models/ 文件夹下,并在 models/__init__.py 中统一导入所有模型:

# models/user.py
from db import db
from datetime import datetime
from uuid import uuid4class BaseModel(db.Model):__abstract__ = Trueid = db.Column(db.Integer, primary_key=True)created_at = db.Column(db.DateTime, default=datetime.now)updated_at = db.Column(db.DateTime, default=datetime.now, onupdate=datetime.now)class User(BaseModel):__tablename__ = 'user'uuid = db.Column(db.String(13), unique=True, default=uuid4)username = db.Column(db.String(50), unique=True, nullable=False)
# models/__init__.py
from .user import User

2.5 app.py 中集成

确保在 app.py 中初始化数据库并加载模型:

from flask import Flask
from db import init_db
from models import *  # 导入所有模型app = Flask(__name__)# 从配置文件中加载配置
config_name = os.getenv('FLASK_ENV', 'development')
app.config.from_object(f'config.{config_name}')# 初始化数据库
init_db(app)if __name__ == '__main__':app.run()
2.6 本地开发中的数据库迁移

在本地开发中,你可以通过以下步骤进行数据库迁移:

  1. 生成迁移文件: 在本地开发时,当你修改模型时,运行以下命令生成迁移文件:
     

    flask db migrate -m "Initial migration"
    

    2.应用迁移: 生成迁移文件后,运行以下命令将迁移应用到本地数据库:
     

    flask db upgrade
    

3. 生产环境中的配置和应用

在生产环境中,通常不再生成迁移文件,而是应用已经在开发环境中生成的迁移文件。

3.1 迁移文件的提交

在本地生成的迁移文件通常位于 migrations/versions/ 目录中。你需要将这些迁移文件提交到 Git 仓库,这样在生产环境中可以使用这些文件对数据库进行升级。

3.2 使用 GitHub Actions 部署并执行迁移

假设你使用 Docker 和 GitHub Actions 部署 Flask 应用,可以在 Actions 工作流中执行数据库迁移。

name: Build, Push and Deploy Flask Appon:push:branches:- masterjobs:build_and_deploy:runs-on: ubuntu-lateststeps:- name: Check out the repositoryuses: actions/checkout@v2- name: Login to Docker Hubuses: docker/login-action@v1with:username: ${{ secrets.DOCKER_HUB_USERNAME }}password: ${{ secrets.DOCKER_HUB_PASSWORD }}- name: Build the Docker imagerun: docker build . -t ${{ secrets.DOCKER_HUB_USERNAME }}/flask_app:${{ github.sha }}- name: Push the Docker imagerun: docker push ${{ secrets.DOCKER_HUB_USERNAME }}/flask_app:${{ github.sha }}- name: Deploy to serveruses: appleboy/ssh-action@masterwith:host: ${{ secrets.SERVER_HOST }}username: ${{ secrets.SERVER_USER }}key: ${{ secrets.SERVER_SSH_KEY }}script: |docker pull ${{ secrets.DOCKER_HUB_USERNAME }}/flask_app:${{ github.sha }}docker stop flask_app || true && docker rm flask_app || truedocker run -d --name flask_app -p 5100:5100 ${{ secrets.DOCKER_HUB_USERNAME }}/flask_app:${{ github.sha }}# 执行数据库迁移docker exec flask_app flask db upgrade
3.3 生产环境数据库迁移

在生产环境中,执行数据库迁移的步骤很简单。你只需要通过部署脚本或命令,应用已经提交的迁移文件:
 

flask db upgrade

通过这个命令,数据库会根据你本地生成的迁移文件自动更新表结构。


4. 总结

  • 开发环境: 在开发环境中,你需要频繁地根据模型的变化生成和应用数据库迁移文件,使用 flask db migrateflask db upgrade 来管理数据库的变化。

  • 生产环境: 在生产环境中,你不需要再生成迁移文件,而是使用已经在开发环境中生成的迁移文件,并通过 flask db upgrade 来更新数据库结构。GitHub Actions 可以帮助你在部署时自动执行这一过程。

通过合理的开发流程和生产部署策略,你可以确保 Flask 应用中的数据库始终与模型同步,并且在不同的环境中保持一致。

这样,你就可以轻松地管理 Flask 项目中的数据库,无论是在本地开发,还是在远程生产环境中。

http://www.lryc.cn/news/436487.html

相关文章:

  • 【Java零基础】Java核心知识点之:Map
  • 9.12日常记录
  • 光纤的两种模式
  • SpringMVC的初理解
  • Python 基本库用法:数学建模
  • Android Greendao的数据库复制到设备指定位置
  • Ajax 揭秘:异步 Web 交互的艺术
  • TitleBar:打造高效Android标题栏的新选择
  • Lua协同程序Coroutine
  • 【vue+帆软】帆软升级,从版本9升级到版本11,记录升级过程
  • linux从0到1 基础完整知识
  • “人大金仓”正式更名为“电科金仓”; TDSQL-C支持回收站/并行DDL等功能; BigQuery支持直接查询AlloyDB
  • 大模型微调 - 用PEFT来配置和应用 LoRA 微调
  • Ubuntu构建只读文件系统
  • 【黑金系】金融UI/UX体验设计师面试作品集 Figma源文件分享
  • Golang | Leetcode Golang题解之第392题判断子序列
  • Liunx常用指令
  • CSS基础:浮动(float)如何使用清楚以及代替方法
  • margin重叠该怎么解决?
  • Linux学习笔记(黑马程序员,前四章节)
  • tekton pipeline resources
  • 使用Python实现多个PDF文件的合并
  • 微擎忘记后台登录用户名和密码怎么办?解决方法
  • blender我的对称模型好像中点被我不小心移动了 我现在如果雕刻 两边修改的地方不是对称的 我该怎么办
  • 数据库——MySQL概述
  • 云服务器部署DB-GPT项目
  • 基于锂电池的多路直流电源模块设计
  • 蓝奏云网盘搜索网页版PHP源码
  • CocosCreator面试真题详解
  • 线性代数 第七讲 二次型_标准型_规范型_坐标变换_合同_正定二次型详细讲解_重难点题型总结