alembic是用来做ORM模型与数据库的迁移与映射。alembic使用方式跟git有点类似,表现在两个方面,
第一,alemibi的所有命令都是以alembic开头;
第二,alembic的迁移文件也是通过版本进行控制的。安装方式:pip install alembic

1.1.alembic的使用

(1)定义模型

models.py

 
from sqlalchemy import Column,Integer,String,create_engine
from sqlalchemy.ext.declarative import declarative_base DB_URI = "mysql+pymysql://root:123456@127.0.0.1:3306/alembic_demo?charset=utf8" engine = create_engine(DB_URI) Base = declarative_base(engine) class User(Base):
__tablename__ = 'user'
id = Column(Integer,primary_key=True,autoincrement=True)
username = Column(String(50),nullable=False)
 

(2)在cmd终端初始化,创建一个仓库

alembic init learn_alembic

(3)修改配置文件,指定连接的数据库

alembic.ini

sqlalchemy.url = mysql+pymysql://root:123456@127.0.0.1:3306/alembic_demo?charset=utf8

(4)将models所在的目录路径添加到env.py,并指定target_metadata

 
import sys,os
# 1.__file__:当前文件(env.py)
#2.os.path.dirname(__file__):获取当前文件的目录
#3.os.path.dirname(os.path.dirname(__file__)):获取当前文件目录的上一级目录
#4.sys.path: python寻找导入的包的所有路径
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
import models target_metadata = models.Base.metadata
 

(5)生成迁移脚本

alembic revision --autogenerate -m "第一次提交"

(6)将生成的迁移脚本映射到数据库中

alembic upgrade head

以后如果想要添加或修改模型,重复5,6步骤即可

1.2.alembic常用命令和经典错误解决办法

常用命令和参数解释:

  • init:创建一个alembic仓库
  • rebision:创建一个新的版本文件
  • --autogenerate:自动将当前模型的修改,生成迁移脚本
  • -m:本次迁移做了哪些修改
  • upgrade:将指定版本的迁移文件映射到数据库中,会执行版本文件中的upgrade函数
  • head:代表当前的迁移脚本的版本号
  • downgrade:会执行指定版本的迁移文件中的downgrade函数
  • heads:展示当前可用的heads脚本文件
  • history:列出所有的迁移版本及其信息
  • current:展示当前数据库中的版本号

经典错误

1.FAILED:Target databases is not up to date.

原因:主要是heads和current不相同。current落后于heads的版本

解决办法:将current移动到head上。alembic upgrade head

2.FAILED:Can't locate revision identified by 'xxxxxxx'

原因:数据库中存的版本号不在迁移脚本文件中

解决办法:删除数据的alembic_version表中的数据,重新执行alembic upgrade head

1.3.current命令使用介绍

用alembic工具:数据库中会自动生成一张表alembic_version

在数据库中可以查看当前的版本号

在cmd终端也可以通过current命令查看

alembic current

1.4.Flask-SQLAlchemy下使用alembic

(1)config.py

DB_URI = "mysql+pymysql://root:123456@127.0.0.1:3306/flask_alembic_demo?charset=utf8"

SQLALCHEMY_DATABASE_URI = DB_URI

(2)flask_alembic_demo.py

 
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import config app = Flask(__name__)
app.config.from_object(config) db = SQLAlchemy(app) class User(db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer,primary_key=True,autoincrement=True)
username = db.Column(db.String(50),nullable=False) @app.route('/')
def hello_world():
return 'Hello World!' if __name__ == '__main__':
app.run()
 

(3)初始化

alembic init alembic

(4)alembic.ini

sqlalchemy.url = mysql+pymysql://root:123456@127.0.0.1:3306/flask_alembic_demo?charset=utf8

(5)env.py

 
import sys,os
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
import flask_alembic_demo #用的是db.Model
target_metadata = flask_alembic_demo.db.Model.metadata
 

(6)生成迁移脚本

alembic revision --autogenerate -m "first commit"

(7)upgrade到数据库

alembic upgrade head

(8)添加字段

假入想添加一个字段age

class User(db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer,primary_key=True,autoincrement=True)
username = db.Column(db.String(50),nullable=False)
age = db.Column(db.Integer)

重复步骤即可

alembic revision --autogenerate -m "add column age"

alembic upgrade head

flask-alembic数据迁移工具的更多相关文章

  1. 4.alembic数据迁移工具

    alembic是用来做ORM模型与数据库的迁移与映射.alembic使用方式跟git有点类似,表现在两个方面,第一个,alemibi的所有命令都是以alembic开头: 第二,alembic的迁移文件 ...

  2. 数据迁移工具sqoop

    有问题........数据迁移工具sqoop sqoop安装 [root@sqoop data]# wget  wget http://apache.fayea.com/sqoop/1.4.6/sqo ...

  3. 撸了个 django 数据迁移工具 django-supertube

    撸了个 django 数据迁移工具 django-supertube 支持字段映射和动态字段转化. 欢迎 star,issue https://github.com/FingerLiu/django- ...

  4. Sqoop数据迁移工具的使用

    文章作者:foochane  原文链接:https://foochane.cn/article/2019063001.html Sqoop数据迁移工具的使用 sqoop简单介绍 sqoop数据到HDF ...

  5. Sqoop 数据迁移工具

    Sqoop 数据迁移工具 sqoop : SQL to hadOOP 两个功能: 1. RDB 向HDFS导入 2. HDFS向RDB导入 注:拷贝mysql-connector.jar 和 json ...

  6. 4.Flask-alembic数据迁移工具

    alembic是用来做ORM模型与数据库的迁移与映射.alembic使用方式跟git有点类似,表现在两个方面,第一个,alemibi的所有命令都是以alembic开头: 第二,alembic的迁移文件 ...

  7. flask处理数据,页面实时刷新展示

    背景: 后端 flask(python)处理数据,页面实时刷新,类似于打包页面的动态展示,展示效果如图: 代码如下: 前端主要使用以下循环处理, 2--- 2秒刷新一次 {% if 0 == stop ...

  8. 结合docker做flask+kafka数据接口与压力测试

    一.需求 需要做实时数据接入的接口.数据最终要写入库,要做到高并发,数据的完整,不丢失数据. 二.技术选型 1.因为只是做简单的接口,不需要复杂功能,所以决定用flask这个简单的python框架(因 ...

  9. sqlalchemy + alembic数据迁移

    需要安装的包工具 pip install pymysql pip install sqlalchemy pip install alembic   创建表 新建models.py from sqlal ...

随机推荐

  1. Java基础6一面向对象

    面向对象的编程思想:是以事物的整体的为基本单位,从事物的属性和行为两个方面进行描述. 特点: Java来源于生活服务于生活 用面向对象的思想能够接近正常的思维方式. 面向对象语言中有设计模式一说. 在 ...

  2. LCA 离线的Tarjan算法 poj1330 hdu2586

    LCA问题有好几种做法,用到(tarjan)图拉算法的就有3种.具体可以看邝斌的博客.http://www.cnblogs.com/kuangbin/category/415390.html 几天的学 ...

  3. 优动漫PAINT(clip studio paint)怎么画一幅水墨竹子图

    今天小编分享使用优动漫PAINT绘制一个水墨竹子教程,绘画的过程中我只用到了两个笔刷,即钢笔模式下的“美术字”和“效果线专用”,并且全程鼠标绘制哦,所以生疏的笔触效果大家见谅,没有数位板的小伙伴不妨试 ...

  4. MySQL 单表查询多表查询

    一 单表查询 表准备 create table emp( id int not null unique auto_increment, name varchar(20) not null, sex e ...

  5. nginx获取经过层层代理后的客户端真实IP(使用正则匹配)

    今天帮兄弟项目搞了一个获取客户端真实IP的问题,网上这种问题很多,但是对于我们的场景都不太合用,现把我的解决方案share给大家,如有问题,请及时指出. 场景: 在请求到达后端服务之前,会经过层层代理 ...

  6. Linux搭建oracle数据库

    1.安装前准备   软件硬件要求 操作系统:CentOS 6.4(32bit)Oracle数据库版本:Oracle 10g(10201_database_linux32.zip)最小内存:1G(检查命 ...

  7. jmeter录制

    1.添加线程组 2.添加HTTP代理服务 3.浏览器的代理设置 4.添加证书 5.排除模式 .*\.(jpg|css|png|git).*或者 .*\.jpg 6.录制只限制某一个ip段 7.最后一句 ...

  8. iframe嵌入的子页面如何刷新父窗口

    iframe中刷新父页面方法及一些按钮刷新代码集合[原创+转]2009-07-23 11:12a页面里iframe了个b页面,我想实现在b页面里一个按钮,一按就刷新a页面,也就是父页面,不是只刷新if ...

  9. React 手稿 - Component state

    Component state 实例: import React, { PureComponent } from 'react'; export default class extends PureC ...

  10. Python爬虫基础--爬取车模照片

    import urllib from urllib import request, parse from lxml import etree class CarModel: def __init__( ...