alembic是sqlalchemy的作者开发的。
用来做OMR模型与数据库的迁移与映射。
第一个,alembic的所有命令都是以alembic开头
第二,alembic的迁移文件也是通过版本进行控制的。首先,通过pip install alembic进行安装。
以下将解释alembic的用法
方便数据库与ORM模型的迁移与映射
一.项目开始前就应用
1.alembic 安装
pip install alembic==1.10.4
pip install pymysql==1.0.3
2.alembic用法
先创建好ORM模型
这里默认的sqlalchemy2.0版本
from sqlalchemy import create_engine, Column, String, Integer
from sqlalchemy.orm import DeclarativeBase
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)
DB_URI = 'mysql+pymysql://root:tangsiqi123A@127.0.0.1:3306/test001?charset=utf8mb4'
"""
sqlalchemy2.0版本
"""
engine = create_engine(DB_URI)
class Base(DeclarativeBase):
pass
class User(Base):
__tablename__ = "user"
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String(50), nullable=False)
age = Column(Integer, nullable=False)
3.进入虚拟环境
4.初始化alembic仓库
alembic init alembic-tst
#注:第一个alembic是alembic语法,
#类似git。第二个init代表初始化,
#第三个alembic代表仓库名,你也可以命名其它名字,
#一般采用了alembic这一名字
我们就可以看到我们的项目下多了一个alembic-tst文件和alembic.ini文件
5.修改alembic.ini配置文件
sqlalchemy.url = mysql+pymysql://root:tangsiqi123A@127.0.0.1:3306/alembic_demo?charset=utf8mb4
6.修改env.py文件的target_metadata参数
env.py 修改的部分
import os
import sys
import app
# 把当前项目路径加入到path中
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
target_metadata = app.Base.metadata
7.迁移
创建数据库迁移文件
alembic revision --autogenerate -m “first commit”
#创建成功会在version目录下创建一个迁移文件
#前面xxx…ad这段代表迁移版本号,后面first_commit代表迁移信息
将迁移文件映射到数据库中
alembic upgrade head
7.1 这里是针对使用sqlalchemy1.4
pip install sqlalchemy==1.4.48
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)
"""
sqlalchemy1.4版本
"""
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)
- 重复
如果以后修改了代码,则重复 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)