sqlalchemy 11 Alembic

创建表时,无论是Core 的 metadata.create_all(engine),还是ORM 的 Base.metadata.create_all(engine),sqlalchemy都只会创建缺失的表不会更新表的结构,也不会删除表。当我们想给已经存在于数据库的表 添加或删除 列、拆分模型 等操作时,create_all()无法实现。  Alembic可以实现上述功能,是一个 处理数据库更改 的工具。

迁移可以理解为 数据库内容 更新、更改。

 安装alembic

(venv) > pip install alembic

创建迁移环境。 在venv同级目录下 创建c11 文件夹,cmd开venv进入c11,alembic init alembic(这个参数自己改想要的名字)

(venv) D:\alchemy\c11>alembic init alembic

生成的文件目录结构

|-alembic    #生成的时候自己起的名字
|   |-README
|   |-env.py    #用于 定义和实例化sqlalchemy引擎
|   |-script.py.mako    #模板文件,用于 创建迁移,定义了version里迁移文件 的基本代码结构
|   |-versions    #用于保存 所有级别 的迁移脚本
|-alembic.ini    #包含配置选项(配置要指向的 数据库)

配置迁移环境 。

首先调整alembic.ini和env.py,alembic能和 数据库及app一起工作

修改 alembic.ini 里的 sqlalchemy_url 行。指向需要 进行迁移(更新)的 数据库。

sqlalchemy_url = sqlite:///alembictest.db

在alembic.ini的同级目录 创建app文件夹,app里创建一个空的 __init__.py,让app变成一个模块

app里创建 db.py,sqlalchemy进行配置,使其连接的 数据库 和ini里sqlalchemy_url的一样,并定义一个基类。app/db.py

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

engine = create_engine('sqlite:///alembictest.db')

Base = declarative_base()

更改env.py,使其指向metadata(Base.metadata)。env.py会使用metadata将在 数据库中找到的 与 sqlalchemy中定义的模型 进行比较

import os
import sys
sys.path.append(os.getcwd())

修改env.py里的 target_metadata 行。让alembic把 Base.metadata作为目标。

from app.db import Base
target_metadata = Base.metadata

至此,alembic环境设置好了,它可以共享 app 的数据库db 和 元数据metadata.

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值