首页 > 数据库 >flask数据库迁移方法

flask数据库迁移方法

时间:2022-10-31 10:44:29浏览次数:49  
标签:__ flask app db 迁移 True 数据库

 

一、集成python shell

为避免每次启动shell会话都要导入数据库实例和模型,我们可以使用app.shell_context_processer装饰器来创建并注册一个shell上下文处理器。

app.py

# -*- coding:utf-8 -*-

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_login import UserMixin
import os
basedir = os.path.abspath(os.path.dirname(__file__))

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'data-tes.db')
app.secret_key = 'asds'

db = SQLAlchemy(app)

# 用户表
class User(UserMixin, db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(64), unique=True, index=True)
    username = db.Column(db.String(64), unique=True, index=True)

@app.shell_context_processor
def make_shell_context():
    return dict(db=db, User=User)


@app.route('/login')
def login():
    return 'login'

if __name__ == '__main__':
    app.run()

调用示例

D:\flask\s116>flask shell
Python 3.7.6 (tags/v3.7.6:43364a7ae0, Dec 19 2019, 00:42:30) [MSC v.1916 64 bit (AMD64)] on win32
App: app
Instance: D:\flask\s116\instance
>>> app
<Flask 'app'>
>>> db
<SQLAlchemy sqlite:///D:\flask\s116\data-tes.db>
>>> User
<class 'app.User'>

 

二、使用flask-migrate实现数据库迁移

  如果User表已经存在, 并且增加了一个字段,此时sqlalchemy只能删除此表才可以增加新字段。使用migrate可以跟踪数据库模式的变化, 将字段以增量的方式应用到数据库中。

app.py

……

from flask_migrate import Migrate
migrate = Migrate(app, db)

  生成数据库迁移脚本,此命令会创建migrations子目录,用于存放所有迁移脚本

 

 

 

 使用migragte管理数据库模式变化 的步骤:

  1、对模型做修改, 如增加password_hash字段

class User(UserMixin, db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(64), unique=True, index=True)
    username = db.Column(db.String(64), unique=True, index=True)
    password_hash = db.Column(db.String(128))

 

  2、执行flask db migrate, 创建迁移脚本

D:\flask\s116>flask db migrate
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.autogenerate.compare] Detected added column 'users.password_hash'
Generating D:\flask\s116\migrations\versions\5350ab866d3e_.py ...  done

  3、检查自动生成的脚本, 根据对模型的实际改动进行调整

  4、把迁移脚本纳入版本控制

  5、执行flask db upgrade进行数据库迁移, 检查数据库中是否有新增字段

D:\flask\s116>flask db upgrade
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.runtime.migration] Running upgrade 977684a8a090 -> 5350ab866d3e, empty message

 

标签:__,flask,app,db,迁移,True,数据库
From: https://www.cnblogs.com/kongzhagen/p/16843525.html

相关文章

  • MySQL的默认值约束(Default),数据库设计必备
    一、默认值约束简介默认值(Default)的完整称呼是默认值约束(DefaultConstraint)。MySQL默认值约束用来指定某列的默认值。例如女性员工较多,性别就可以默认为“女”。如果插入......
  • MySQL数据库的唯一性约束(UNIQUE)
    一、数据库表的唯一性约束是什么MySQL唯一约束(UniqueKey)要求被约束的列中的数据唯一,允许为NULL,但只能出现一个NULL值。唯一约束可以确保一列或者几列不出现重复值。二、如......
  • MySQL的唯一约束(Unique Key),数据库设计必备
    一、数据库表的唯一性约束是什么MySQL唯一约束(UniqueKey)要求被约束的列中的数据唯一,允许为NULL,但只能出现一个NULL值。唯一约束可以确保一列或者几列不出现重复值。二、如......
  • JavaWeb之连接数据库操作
    亲爱的学弟学妹,我知道你们是因为什么搜到这篇博客的,我也很懂你们现在的心情,此时此刻举目无亲面对着建民老师的高要求,你们或许十分无助,所以我写下这篇博客,因为我淋过雨所以......
  • SQL之 数据库表字段约束与索引
    第三范式MySQL四种字段约束主键约束非空约束唯一约束创建索引添加和删除索引......
  • 数据库理论笔记【自学用】
    镇楼图pixiv:torino一、介绍数据库系统的组成数据库系统是特殊的计算机系统,目的即存储、处理数据。数据库系统主要由硬件、数据、软件、用户组成。其中数据尤为重......
  • windows 2003 oracle 10.2.0.4 升级迁移到linux 11.2.0.4
    文档课题:windows2003oracle10.2.0.4升级迁移到linux11.2.0.4源端:windows200332位+oracle10.2.0.432位+双实例目标端:centos7.964位+oracle11.2.0.464位应......
  • mysql 通城公司灯具部数据库
    创建数据库: createdatabasetongchenggongsi;  1、           查询车间名称和电话;2、           查询属于台灯厂的车间;   3、      ......
  • 数据库定时执行sql mysql定时任务 event 执行定时任务 和sql server定时任务 作业
     本片文章目的:抛弃触发器  学会使用mysqlsqlserver  使用定时任务执行定时sql 1.sqlserver定时任务   sqlserver集成化微软开发特别的好一个结构化数......
  • 数据库表结构文档生成工具
    背景之前在一家小公司工作时,由于没有完善的应用发布流程,包括配置发布平台,和数据库发布系统,导致测试环境(实际上就是一个IP撑起来的简简单单的服务节点)正常的逻辑,到生产环境(3......