一、安装相应的工具和其使用
1、安装alembic
pip install alembic
2、完成 pip 安装alembic之后步骤如下
- 在 shell 脚本里面 cd 到项目根目录执行
alembic init alembic
注意:tree -L 数字----是用来查看文件的结构
- 用 pycharm 把生成的文件 download 到windows上(包括
alembic
目录和alembic.ini
) - 修改
alembic.ini
设置数据库连接。
修改项如下所示:
sqlalchemy.url = driver://user:pass@localhost/dbname
sqlalchemy.url = mysql+pymysql://admin:Root110qwe@127.0.0.1:3306/mydb#我本次使用的路径
- 在
env.py
中设置,将target_metadata赋值成数据库的元数据(Base.metadata) ;为了防止出现以下,将考虑以下的问题,如果执行 revision 有 import 报错,注意是否正确将当前项目目录添加到 sys.path 路径
import sys
from os.path import abspath,dirname
project_root = dirname(dirname(abspath(__file__)))#把项目根目录加入 sys.path
print(project_root)
sys.path.insert(0, project_root)
from models.auth import Base
target_metadata = Base.metadata
import sys
from os.path import abspath,dirname
root = dirname(dirname(abspath(__file__))) # 把项目根目录加入 sys.path(取出项目的绝对路径)
root1 = dirname(abspath(__file__)) #取出此文件以上的(不包括此文件)的路径
root3 =abspath(__file__) # 取出此文件在的绝对路径
print(root)
print(root1)
print(root3)
/home/pyvip/mytornado
/home/pyvip/mytornado/alembic
/home/pyvip/mytornado/alembic/test.py
- 配置完成执行
alembic revision --autogenerate -m "create_user_table" #自动生成迁移脚本
- 这里可以看到虚拟机目录在 alembic/versions 里生成了 py 文件,然后执行
alembic upgrade head#这样就会更新 mysql 数据库了,创建了相应的表
二、数据库在项目中的表
1、user表
class User(Base):
__tablename__ = 'user'
id = Column(Integer, primary_key=True, autoincrement=True)
username = Column(String(50), nullable=False)
password = Column(String(50))
creatime = Column(DateTime, default=datetime.now)
2、posts表(上传图片的模型,针对图片的)
from sqlalchemy import (Column, String, Integer, DateTime, ForeignKey)
class Post(Base):
__tablename__ = 'posts'
id = Column(Integer, primary_key=True, autoincrement=True)
image_url = Column(String(200))
user_id = Column(Integer, ForeignKey('user.id'))
user = relationship('User', backref='posts', uselist=False, cascade='all')
def __repr__(self):
return "<Post:#{}>".format(self.id)
三、alembic相应命令的使用
1、查看记录和历史
alembic history
2、回退上一个升级的版本
alembic downgrade -1
3、查看生成的 py 文件
ls -l alembic/versions
4、删除
rm alembic/versions/xxx.py
四、常见问题
1、执行 alembic 报错,KeyError:'5b29018b55ba'
原因:该版本曾经upgrade执行过了,但是文件被删除。
解决办法:更新数据库 alembic_version 表记录。
ERROR [alembic.util.messaging] Can't locate revision identified by 'a2de455a4f51' FAILED: Can't locate revision identified by 'a2de455a4f51'
2、执行 alembic revision --autogenerate 没有看到生成的 py 文件有数据库更新操作的代码
原因:Base import 不正确,或者 model 定义不正确。
解决办法:检查 model 代码。
3、数据库还没有执行 upgrade head 更新,不能执行 autogenerate,ERROR [alembic.util.messaging] Target database is not up to date. FAILED: Target database is not up to date.
删除 versions 所有 py 文件之后的重新开始,最好把数据库的表也删除完,这样才能确保生成的py文件反应所有数据库变更。
4、单独更改列名或一些列属性和表名等不能自动识别(需要注意)
网友评论