alembic迁移数据表
安装alembic
pip install alembic
初始化项目
alembic init alembic
修改 根目录\alembic.ini
执行完成之后你会发现根目录多了个ini配置文件和alembic文件夹,我们需要稍微修改下配置文件:
sqlalchemy.url = mysql+pymysql://root:bjhit%%402022@172.16.30.55:3306/darknet_target
注意password需要使用%%40来代替@符号;用以下代码得到:
SQLALCHEMY_DATABASE_URL = f'mysql+pymysql://{DB_USER}:{urlquote(DB_PASSWD).replace("%", "%%")}@{DB_HOST}:{DB_PORT}/{DB_NAME}?charset=utf8'
print(SQLALCHEMY_DATABASE_URL)
修改 根目录\alembic\env.py
改两个地方:
-
第一个地方 Base
注释 # target_metadata = None 添加上以下 from target_app.models import Base # 具体为这个: Base = declarative_base() # 创建一个Base类 target_metadata = Base.metadata
-
第二个地方 engine
注释 # connectable = engine_from_config( # config.get_section(config.config_ini_section, {}), # prefix="sqlalchemy.", # poolclass=pool.NullPool, # ) 添加上以下 from target_app.database import engine connectable = engine
生成迁移文件
-m 改成具体的操作,比如第一次就是建表,第二次就是更新什么地方,类似git commit -m的操作,一个标注。
alembic revision --autogenerate -m "create inital tables"
执行迁移操作
alembic upgrade head
注意
如果删除了versions中生成的迁移文件,需要同步删除数据库表alembic_version表中的数据,否则会报以下错误:
(venv) C:\Users\17629\Desktop\code\target>alembic revision --autogenerate -m "create inital tables"
2023-11-02 17:22:52,033 DEBUG mylogger line-30 init_logger logger init done
DEBUG [target] logger init done
INFO [alembic.runtime.migration] Context impl MySQLImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
ERROR [alembic.util.messaging] Can't locate revision identified by '0267fae60883'
FAILED: Can't locate revision identified by '0267fae60883'