alembic是sqlalchemy的作者开发的。用来做OMR模型与数据库的迁移与映射。alembic使用方式跟git有点了类似,表现在两个方面。
第一个,alembic的所有命令都是以alembic开头
第二,alembic的迁移文件也是通过版本进行控制的。首先,通过pip install alembic进行安装。
以下将解释alembic的用法
方便数据库与ORM模型的迁移与映射
pip install alembic==1.10.4
pip install pymysql==1.0.3
先创建好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)
"""
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)
alembic init alembic
#注:第一个alembic是alembic语法,
#类似git。第二个init代表初始化,
#第三个alembic代表仓库名,你也可以命名其它名字,
#这里为了方便理解,所以采用了alembic这一名字
我们就可以看到我们的项目下多了一个alembic文件和alembic.ini文件
sqlalchemy.url = mysql+pymysql://root:123456@localhost/alembic_demo
#注:和数据库连接信息一样
import os
import sys
import alembic_demo
# 把当前项目路径加入到path中
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
target_metadata = alembic_demo.Base.metadata
创建数据库迁移文件
alembic revision --autogenerate -m "first commit"
#创建成功会在version目录下创建一个迁移文件
#前面xxx...ad这段代表迁移版本号,后面first_commit代表迁移信息
将迁移文件映射到数据库中
alembic upgrade head
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 的步骤。
另外,在你第一次执行upgrade的时候,就会在数据库中创建一个名叫alembic_version表,这个表只会有一条数据,记录当前数据库映射的是哪个版本的迁移文件。
- 更新数据库 `alembic upgrade 版本号`
- 更新到最新版 `alembic upgrade head`
- 降级数据库 `alembic downgrade 版本号`
- 更新到最初版 `alembic downgrade head`
alembic upgrade 版本号 --sql > migration.sql####离线更新(生成sql)
待更新…
解决方法:打开mysql删除alembic_version版本号