在做项目的过程中,我们都遇到过,经常需要修改我们数据库的字段,在flask中,是通过ORM(对象关系映射)来创建数据库的,表--->model class,字段---->属性

在flask中,我们是通过第三方插件SQLAlchemy来创建数据库表,采用的是db.create_all()方法,这样,在我们修改数据库的Model的字段之后,想要同步数据库,就只能通过删除表,然后重新调用db.create_all()来完成。

所以,flask引入了flask_script 和 flask_migrate(pip install)来解决这个问题:

1、新建manager.py文件,编写如下:

  from flask_script import Manager

  from flask_migrate import Migrate, MigrateCommond

  from app import app

  from apps.models.base import db

  manager = Manager(app)

  # 要使用flask-migrate,必须先绑定db和app

  migrate = Migrate(app, db)

  # 将MigrateCommand添加到manager中,"db"是自定义命令

  manager.add_command("db", MigrateCommond)

  

  if __name__ == "__main__":

    manager.run()

2、打开终端,进入项目根目录,执行下面命令

  python manager.py db init

  初始化成功后,你的项目目录多了一个migrattions文件夹

  

3、然后每次在修改了model的字段后,执行下面的命令

  python manager.py db migrate

  从执行过程中我们可以看到我们修改的字段

  

  执行完成后,再去查看生成的migrations文件夹,下面的versions里面会多出来一个.py的迁移脚本文件,检查表格及字段

  

3、更新数据库

  python manager.py db upgrade

  upgrade会自动读取刚才生成的文件,将数据更新到数据库中。

  

  执行完成后,检查你的数据库,发现数据库字段按照我们的需要更新了。

【注1: python manager.py db migrate 将模型生成迁移文件,只要模型修改了,就执行一次这个命令】

【注2:python manger.py db upgrade 将迁移文件真正映射到数据库中,每次运行了migrate命令,就要记得运行这个命令,不然数据库中的信息是不会被修改的。】

【注3:记得要把对应的模型引入到manager.py文件中,不然执行命令是不会起作用的哦^_^】

4、回滚事物

  1)运行 python manager.py db history

    查看历史版本,得到history-id

  2)运行 python manager.py db downgrade history-id

    回退到指定历史版本

    

flask 更新数据库的更多相关文章

  1. flask 使用Flask-Migrate迁移数据库(创建迁移环境、生成迁移脚本、更新数据库)

    使用Flask-Migrate迁移数据库 在开发时,以删除表再重建的方式更新数据库简单直接,但明显的缺陷是会丢掉数据库中的所有数据.在生产环境下,没有人想把数据都删除掉,这时需要使用数据库迁移工具来完 ...

  2. Python——Flask框架——数据库

    一.数据库框架 Flask-SQLAlchemy (1)安装: pip install flask-sqlalchemy (2)Flask-SQLAlchemy数据库URL 数据库引擎 URL MyS ...

  3. Flask之数据库迁徙

    4.3 数据库迁移 在开发过程中,需要修改数据库模型,而且还要在修改之后更新数据库.最直接的方式就是删除旧表,但这样会丢失数据. 更好的解决办法是使用数据库迁移框架,它可以追踪数据库模式的变化,然后把 ...

  4. 5.flask与数据库

    1.安装postgresql 注意:在flask中,操作数据库还是通过orm调用驱动来操作.sqlalchemy是python下的一款工业级的orm,比Django自带的orm要强大很多,至于什么类型 ...

  5. flask修改数据库字段的类型和长度

    flask修改数据库字段的类型和长度 ​ 在将models中的字段的db.String(256)修改为db.String(1024)后,执行migrate和upgrade操作后,发现数据库并没有更新, ...

  6. flask迁移数据库时报错:Target database is not up的解决方案

    在flask中进行数据库迁移时报错,报错信息为"Target database is not up",解决方案如下 找到alembic的最新版本号,找到文件夹migrate下的最新 ...

  7. flask操作数据库 以及 建表

    创建迁移仓库 首先,安装Flask-Migrate: pip install flask-migrate 将app项目注册,便于使用orm操作 from flask_sqlalchemy import ...

  8. Flask flask-migrate 数据库迁移

    简介 flask-migrate是flask的一个扩展模块,主要是扩展数据库表结构的. 官方文档:http://flask-migrate.readthedocs.io/en/latest/ 使用: ...

  9. 使用CodeFirst创建并更新数据库

    本文主要介绍如何使用CodeFirst模式来新建并更新数据库 在使用Entity Framwork的三种方式(ModelFist.DBFirst.CodeFirst)中,CodeFirst方式书写的代 ...

随机推荐

  1. Scala隐式参数

    Scala方法可以具有隐式参数列表,由参数列表开头的implicit关键字标记.如果参数列表中的参数没有像往常一样传递,Scala将查看它是否可以获得正确类型的隐式值,如果可以,将自动传递. Scal ...

  2. Linux下图形数据库Neo4j单机安装

    Neo4j数据库简介 Neo4j 是一个NoSQL的图形数据库(Graph Database).Neo4j使用图(graph)相关的概念来描述数据模型,把数据保存为图中的节点以及节点之间的关系.很多应 ...

  3. HttpHandler实现网页图片防盗链

    using System; using System.Collections.Generic; using System.Linq; using System.Web; /// <summary ...

  4. shell 函数用法

    近期在学习shell编程方面的知识,写的不怎么好,请大家多多指点,下面给大家分享一下shell函数的用法. 我们为什么要用shell函数? 简单的说,函数的作用就是把程序多次调用相同的代码部分定义成一 ...

  5. ubantu下安装pip,python,pycharm,numpy,scipy,matplotlibm,pandas 以及sklearn

    ubuntu 安装 pip 及 pip 常用命令: https://blog.csdn.net/danielpei1222/article/details/62969815 ubuntu下不同版本py ...

  6. XSS 漏洞原理及防御方法

    XSS跨站脚本攻击:两种情况.一种通过外部输入然后直接在浏览器端触发,即反射型XSS:还有一种则是先把利用代码保存在数据库或文件中,当web程序读取利用代码并输出在页面上时触发漏洞,即存储型XSS.D ...

  7. Java数据结构简述

    1.数组 概念:一个存储元素的线性集合. 数组声明和创建: dataType[] arrayRefVar = new dataType[arraySize]; 二维数组(多维数组)声明和创建: dat ...

  8. Python学习之函数进阶

    函数的命名空间 著名的python之禅 Beautiful is better than ugly. Explicit is better than implicit. Simple is bette ...

  9. Spring Cloud构建微服务架构:服务网关(路由配置)【Dalston版】

    转载:http://blog.didispace.com/spring-cloud-starter-dalston-6-2/ 原创  2017-08-26  翟永超  Spring Cloud 被围观 ...

  10. 2.01-request_header

    import urllib.request def load_baidu(): url= "https://www.baidu.com" header = { #浏览器的版本 &q ...