• Flask学习笔记(7):flask-migrate


    flask-migrate相当于是给alembic进行了flask式的封装一样,以前用alembic做数据库版本迁移时,要初始化:alembic init alembic,然后就是修改配置文件,然后生成版本:alembic revision --autogenerate -m "xxx",更新到最新版本:alembic upgrade head,这一套流程走下来很麻烦,现在将这些命令跟manage绑定到一起,直接用python manage.py db init/migrate/upgrade就能实现数据库的版本迁移了,很方便。

    安装:pip install flask-migrate

    小项目的基本结构:

    正常情况下将数据库表对应的所有模型放在models.py里面,要用到db,得从app.py 导入,但是app.py也要导入models.py里面的模型,这样就形成了循环引用。现在将db放在第三方模块exts.py中,这样,models和app就都能够从exts中去导入db。

    app.py:

    manage.py:

    modles.py:

    上面这五个模块之间的关系一定要理清楚!

    cmd命令:

    ==================================== 华丽的分割线 ============================================

    使用了一段时间后发现,在数据库迁移时有很多坑:

    1、有时migrate时:

     等你去upgrade时又是报错,这时不要慌,查看mysql里的当前版本号:

     再去版本库里面根据时间轴删除比当前版本号新的版本,或者downgrade + 版本号回退到以前的版本。

    2、更改表的字段内的属性值而不改字段名是不会生成迁移脚本的,如

     将默认值从100改为0,再去migrate:

     显示未检测到改变。

    3、有时设置default默认值无效,如default="0",或者把双引号变为单引号也无效,用server_default="100"就行了。

    有时用server_default也会报错,说只支持字符串和其他两种类型的数据:

    sqlalchemy.exc.ArgumentError: Argument 'arg' is expected to be one of type '<class 'str'>' or '<class 'sqlalchemy.sql.elements.ClauseElement'>' or '<class 'sqlalchemy.sql.elements.TextClause'>', got '<class 'int'>'

    解决:

    form sqlalchemy import text

    server_default = text("100");

    反正感觉这玩意很玄乎。

  • 相关阅读:
    Linux下常用的3种软件安装方式
    解决navicate 连接mysql数据库中文乱码的问题
    Lua 遍历Linux目录下的文件夹
    ubuntu 更改源
    ubuntu 下安装配置LAMP
    简述configure、pkg-config、pkg_config_path三者的关系
    linux 下库的深入调研
    Linux下的库操作工具-nm、ar、ldd、ldconfig和ld.so
    linux命令strings
    c++隐式类型转换和explicit
  • 原文地址:https://www.cnblogs.com/wangyi0419/p/12784196.html
Copyright © 2020-2023  润新知