创建表时,无论是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 sessionmakerengine = 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.

sqlalchemy 11 Alembic相关推荐

  1. SqlAlchemy + Alembic Migrate

    SqlAlchemy+sqlite3+Alembic 数据库迁移踩坑- NotImplementedError: No support for ALTER of constraints in SQLi ...

  2. Mysql实现自动升级

    文章目录 一.mysql表设计 二.mysql orm生成 三.修改orm 四.mysql orm刷回数据库 五.参考 背景: 建立一个数据库mydb, 含有一个表employee, employee ...

  3. MySQL数据库必备知识

    MySQL数据库基础知识 一.数据库说明 1.1 什么是数据库 数据库(Database)是一种存储结构化数据的方式,一般存在两种类型的数据库: 关系型数据库.非关系型数据库. 关系型数据库: 存储二 ...

  4. SqlAlchemy Alembic数据库升级与降级简易教程

    前言 通常我们会将我们的代码放入到某个VCS(版本控制系统)中,进行可追溯的版本管理.一个项目除了代码,通常还会有一个数据库,这个数据库可能会随着项目的演进发生变化,甚至需要可以回滚到过去的某个状态, ...

  5. sqlalchemy 13 控制alembic

    迁移之前,需先 确认哪些迁移已经应用到数据库了.查看应用到数据库的最后一次迁移ID 用 alembic current, (venv) D:\alchemy\c11>alembic curren ...

  6. sqlalchemy+alembic

    第一步:创建项目目录 mkdir sqlalchemy_alembic 第二步:初始化数据库版本管理器 cd /xxx/xxx/sqlalchemy_alembic # init后的名称随意取 ale ...

  7. Python SQLAlchemy Alembic的使用

    大家好,我是练习时长两年半的大数据练习生,喜欢数学,AI,大数据. 写博客是为了总结,分享,自娱自乐.希望写出的东西会对自己,对别人都有价值! 废话不多说,现在是个终身学习的时代,开始学习了!奥力给! ...

  8. Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  9. Python全栈开发:RabbitMQ/Redis/Memcache/SQLAlchemy

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

最新文章

  1. 【云计算】云上建站快速入门:博客、论坛、CMS、电子商务网站统统
  2. 【Dual-Path-RNN-Pytorch源码分析】Dual_RNN_Block
  3. ICS汇编学习笔记——8086的指令系统
  4. java的json导出excel_利用json生成excel表格
  5. 《JavaScript 每周导读》【第一期】
  6. 推荐给程序猿们好用的谷歌插件
  7. NEWS - InstallShield 2015 正式发布
  8. Intel缓存控制相关的寄存器
  9. 雷军自述:我惨痛的大学创业失败经历
  10. abcde依次进入一个队列_体育老师必看——详解队列队形及口令(2)
  11. sonnar检查出没有的方法_你有没有定期检查轮胎?它还能换位置,真是“经济”宝藏方法...
  12. python基本代码教程-如何真正零基础入门Python?(第一节)
  13. 4g内存 mysql_mysql 4G内存配置表
  14. 圣诞表白html,Pyhton表白代码——浪漫圣诞节
  15. 团体项目搜查令更新一
  16. 信息学奥赛一本通 1335:【例2-4】连通块
  17. 终于弄懂了origin批量制图
  18. WinXP系统下Opencms的安装与配置
  19. 对未来的打算和本专业的认识
  20. 只有毅力和决心无往不利

热门文章

  1. 老手机秒变监控器+监听器
  2. “抖音”式的酷炫短视频开发进阶
  3. 面试高并发,凉了(全程高能,赶快收藏)
  4. python中字典类型中的item是什么-Python中的基本数据类型之字典类型
  5. Vue基础技术|背景图铺满全屏效果
  6. node对应node-sass版本(截图来自官网)
  7. 领导力开发策略-360度测评
  8. 十以内的加减乘除运算题
  9. ABAP 屏幕双滚动条
  10. fortran和python_python调用fortran