当前位置: 首页 > 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.mrgr.cn/news/25488.html

相关文章:

  • 大模型微调 - 训练参数
  • 一些硬件知识(二十三)
  • Typst快速入门教程
  • 用友U8-CRM-exportdictionarySQL注入
  • Pywinauto鼠标操作指南
  • iOS 18 RC 版本更新,为相机应用引入了“暂停录制视频”功能
  • 3分钟教你学会Java抽象类
  • 牛客思维题———进制(简单)
  • mp3转文字要怎么处理?使用这4个工具就对了
  • 机器学习:逻辑回归--过采样
  • 代码随想录day21|回溯法02
  • 5个AI绘画免费,支持Midjourney【亲测有效】
  • 苍穹外卖——day1
  • 【JAVA入门】Day42 - 转换流
  • 004 【编译神器】Makefile:最常用编译方法详解
  • Linux - iptables防火墙
  • 【警告 C6031:返回值被忽略:scanf】
  • Linux计算文件权限的mode和umask
  • bug是什么意思
  • MySQL学习(函数整理)