您现在的位置是:首页 >技术杂谈 >alembic迁移网站首页技术杂谈
alembic迁移
简介alembic迁移
alembic 作用
alembic是sqlalchemy的作者开发的。用来做OMR模型与数据库的迁移与映射。alembic使用方式跟git有点了类似,表现在两个方面。
第一个,alembic的所有命令都是以alembic开头
第二,alembic的迁移文件也是通过版本进行控制的。首先,通过pip install alembic进行安装。
以下将解释alembic的用法
方便数据库与ORM模型的迁移与映射
一.项目开始前就应用
1.alembic 安装
pip install alembic==1.10.4
2.alembic用法
先创建好ORM模型
from sqlalchemy import create_engine,Column,String,Integer
from sqlalchemy.ext.declarative import declarative_base
DIALCT = "mysql"
DRIVER = "pymysql"
USERNAME = "root"
PASSWORD = "123456"
HOST = "127.0.0.1"
PORT = "3306"
DATABASE = "alembic_demo"
DB_URI = "{}+{}://{}:{}@{}:{}/{}?charset=utf8".format(DIALCT,DRIVER,USERNAME,PASSWORD,HOST,PORT,DATABASE)
engine = create_engine(DB_URI)
Base = declarative_base(engine)
class User(Base):
__tablename__ = "user"
id = Column(Integer , primary_key=True , autoincrement=True)
name = Column(String(50) , nullable=False)
3.进入虚拟环境
4.初始化alembic仓库
alembic init alembic
#注:第一个alembic是alembic语法,
#类似git。第二个init代表初始化,
#第三个alembic代表仓库名,你也可以命名其它名字,
#这里为了方便理解,所以采用了alembic这一名字
我们就可以看到我们的项目下多了一个alembic文件和alembic.ini文件
5.修改alembic配置文件
sqlalchemy.url = mysql+pymysql://root:123456@localhost/alembic_demo
#注:和数据库连接信息一样
6.修改env.py文件的target_metadata参数
import os
import sys
import alembic_demo
# 把当前项目路径加入到path中
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
target_metadata = alembic_demo.Base.metadata
7.迁移
创建数据库迁移文件
alembic revision --autogenerate -m "first commit"
#创建成功会在version目录下创建一个迁移文件
#前面xxx...ad这段代表迁移版本号,后面first_commit代表迁移信息
将迁移文件映射到数据库中
alembic upgrade head
出现下方信息,说明成功映射到表中
注:alembic映射到数据库流程,ORM模型 ——迁移文件——映射到数据库中
8. 重复
如果以后修改了代码,则重复 7 的步骤。
9.常用命令和参数
- init:创建一个alembic仓库。
- revision:创建一个新的版本文件。
- –autogenerate:自动将当前模型的修改,生成迁移脚本。
- -m:本次迁移做了哪些修改,用户可以指定这个参数,方便回顾。
- upgrade:将指定版本的迁移文件映射到数据库中,会执行版本文件中的upgrade函数。如果有多个迁移脚本没有被映射到数据库中,那么会执行多个迁移脚本。
- [head]:代表最新的迁移脚本的版本号。
- downgrade:会执行指定版本的迁移文件中的downgrade函数。
- heads:展示head指向的脚本文件版本号。
- history:列出所有的迁移版本及其信息。
- current:展示当前数据库中的版本号。
另外,在你第一次执行upgrade的时候,就会在数据库中创建一个名叫alembic_version表,这个表只会有一条数据,记录当前数据库映射的是哪个版本的迁移文件。
- 更新数据库 `alembic upgrade 版本号`
- 更新到最新版 `alembic upgrade head`
- 降级数据库 `alembic downgrade 版本号`
- 更新到最初版 `alembic downgrade head`
alembic upgrade 版本号 --sql > migration.sql####离线更新(生成sql)
二.项目开发到一半用alembic库
1.数据库字段类型和代码字段类型不一致
2.表中有数据了改代码,数据会不会丢失
待更新…
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。