Flask踩坑之模型配置和mysql迁移同步


由于网上Flask的学习资料不多,在学习的时候遇到了一些坑,也不是很好排查,我就顺手整理了一些自己的学习笔记,给需要的同学们使用

Flask 模型配置和迁移同步

笔记, 明天再整理, 这两天比较忙

python 开发环境介绍

我使用的是python3.8 做的虚拟环境

运行依赖信息

这个是我本地可以正确运行的环境依赖

alembic==1.8.1
click==8.1.3
colorama==0.4.5
Flask==2.2.2
Flask-Migrate==2.2.0
Flask-Script==2.0.6
Flask-SQLAlchemy==3.0.2
greenlet==2.0.1
importlib-metadata==5.0.0
importlib-resources==5.10.0
itsdangerous==2.1.2
Jinja2==3.1.2
Mako==1.2.3
MarkupSafe==2.1.1
PyMySQL==1.0.2
SQLAlchemy==1.4.44
Werkzeug==2.2.2
zipp==3.10.0

流程记录

设置配置文件

class Config:
    DEBUG = True
    # sqlalchemy中连接数据库的配置
    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:root_password@host:port/DatabaseName'
    # 去掉追踪的警告
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    # 开启日志记录
    SQLALCHEMY_ECHO = True


class DevelopmentConfig(Config):
    ENV = 'development'


class ProductionConfig(Config):
    ENV = 'production'
    DEBUG = False

新建一个ext 目录

ext
并且在这个 ext 目录的init 文件中创建一个映射对象

创建映射对象

在app 中绑定 db 对象

绑定db

在 app.py中,加上命令工具,将命令交给manager 管理

在 app.py 中, 加上命令工具, 将 命令交给manager 管理
manager

在配置文件中 补充一下 sqlalchemy的配置

在配置文件中 补充一下 sqlalchemy的配置
sqlalchemy

创建模型,在user目录下,新建模型

witch
modle
其实 模型就是 对应的数据库里的表

使用迁移命令


a. ************敲黑板***************
   在app.py 中导入模型:from apps.user.models import User
   每一个模型类都要在app.py 中进行导入,不然就会运行报错

b. 在终端使用命令:db
    python3 app.py db init   -----》 产生一个文件夹migrations
    python3 app.py db migrate -----> 自动产生了一个版本文件
     项目
      | ---apps
      | ---ext
      | ---migrations    python3 app.py db init     只需要init一次
               |---versions   版本文件夹
                    |---71edde7ee937_.py    ---》  python3 app.py db migrate  迁移
                    |---cc0dca61130f_.py
                                                  python3 app.py db upgrade 同步
                                                  python3 app.py db downgrade 降级

去数据里查看生成的表

去 mysql 上可以查看,会看到表,也会看到一个记录版本的表
sql

在此期间解决的版本依赖问题

flask 版本过高的问题

bug
解决bug

flask-sqlalchemy没有提示的问题

没有提示

虽然可以运行,但是没有提示。经过验证,把flask-sqlalchemy 降低到 2.5 版本就能用到 数据库字段的提示(此时是3.0版本)
提示


文章作者: 陌上人如玉
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 陌上人如玉 !
  目录