在做项目的过程中,我们都遇到过,经常需要修改我们数据库的字段,在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. java质数判断

    import java.util.Scanner; /** * Created by Admin on 2017/3/25. */ public class test01 { public stati ...

  2. web前端(14)—— JavaScript的数据类型,语法规范1

    编辑器选择 对js的编辑器选用,有很多,能对html编辑的,也能对js编辑,比如notepad++,visual studio code,webstom,atom,pycharm,sublime te ...

  3. 洗礼灵魂,修炼python(88)-- 知识拾遗篇 —— 线程(2)/多线程爬虫

    线程(下) 7.同步锁 这个例子很经典,实话说,这个例子我是直接照搬前辈的,并不是原创,不过真的也很有意思,请看: #!usr/bin/env python #-*- coding:utf-8 -*- ...

  4. Linux进程调度器概述--Linux进程的管理与调度(十五)

    调度器面对的情形就是这样, 其任务是在程序之间共享CPU时间, 创造并行执行的错觉, 该任务分为两个不同的部分, 其中一个涉及调度策略, 另外一个涉及上下文切换. 1 背景知识 1.1 什么是调度器 ...

  5. Emacs中多个golang项目的配置方法

    概述 最近使用golang开发项目时, 发现有时需要同时进行多个golang项目. 在这种情况下, 如果把所有的项目都放在 GOPATH 之下, 不仅管理麻烦(因为各个项目需要提交到不同的代码库), ...

  6. css点滴2—六种方式实现元素水平居中

    本文参考文章<六种方式实现元素水平居中> 元素水平居中的方法,最常见的莫过于给元素一个显式的宽度,然后加上margin的左右值为auto.这种方式给固定宽度的元素设置居中是最方便不过的.但 ...

  7. Linux中“!"的神奇用法

    前言 实际上,不起眼的“!”在linux中有着很多让你惊叹的妙用.本文就来细数那些“!”的神奇用法. 执行上一条命令 例如,在执行完上面一条命令后,可以使用下面的方式再次执行上一条命令: $ wher ...

  8. 《Java大学教程》—第21章 高级案例研究

    21.3    需求:P510用例模型(use case model):用例图(use case diagram).用例(use case).行为说明(behaviour specification) ...

  9. (转)Spring Boot 2 (七):Spring Boot 如何解决项目启动时初始化资源

    http://www.ityouknow.com/springboot/2018/05/03/spring-boot-commandLineRunner.html 在我们实际工作中,总会遇到这样需求, ...

  10. ImportError: cannot import name 'Process' from 'multiprocessing'

    from multiprocessing import Process import os def run_proc(name): print 'Run child process %s (%s).. ...