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 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相关推荐
- SqlAlchemy + Alembic Migrate
SqlAlchemy+sqlite3+Alembic 数据库迁移踩坑- NotImplementedError: No support for ALTER of constraints in SQLi ...
- Mysql实现自动升级
文章目录 一.mysql表设计 二.mysql orm生成 三.修改orm 四.mysql orm刷回数据库 五.参考 背景: 建立一个数据库mydb, 含有一个表employee, employee ...
- MySQL数据库必备知识
MySQL数据库基础知识 一.数据库说明 1.1 什么是数据库 数据库(Database)是一种存储结构化数据的方式,一般存在两种类型的数据库: 关系型数据库.非关系型数据库. 关系型数据库: 存储二 ...
- SqlAlchemy Alembic数据库升级与降级简易教程
前言 通常我们会将我们的代码放入到某个VCS(版本控制系统)中,进行可追溯的版本管理.一个项目除了代码,通常还会有一个数据库,这个数据库可能会随着项目的演进发生变化,甚至需要可以回滚到过去的某个状态, ...
- sqlalchemy 13 控制alembic
迁移之前,需先 确认哪些迁移已经应用到数据库了.查看应用到数据库的最后一次迁移ID 用 alembic current, (venv) D:\alchemy\c11>alembic curren ...
- sqlalchemy+alembic
第一步:创建项目目录 mkdir sqlalchemy_alembic 第二步:初始化数据库版本管理器 cd /xxx/xxx/sqlalchemy_alembic # init后的名称随意取 ale ...
- Python SQLAlchemy Alembic的使用
大家好,我是练习时长两年半的大数据练习生,喜欢数学,AI,大数据. 写博客是为了总结,分享,自娱自乐.希望写出的东西会对自己,对别人都有价值! 废话不多说,现在是个终身学习的时代,开始学习了!奥力给! ...
- Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...
- Python全栈开发:RabbitMQ/Redis/Memcache/SQLAlchemy
Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...
最新文章
- 【云计算】云上建站快速入门:博客、论坛、CMS、电子商务网站统统
- 【Dual-Path-RNN-Pytorch源码分析】Dual_RNN_Block
- ICS汇编学习笔记——8086的指令系统
- java的json导出excel_利用json生成excel表格
- 《JavaScript 每周导读》【第一期】
- 推荐给程序猿们好用的谷歌插件
- NEWS - InstallShield 2015 正式发布
- Intel缓存控制相关的寄存器
- 雷军自述:我惨痛的大学创业失败经历
- abcde依次进入一个队列_体育老师必看——详解队列队形及口令(2)
- sonnar检查出没有的方法_你有没有定期检查轮胎?它还能换位置,真是“经济”宝藏方法...
- python基本代码教程-如何真正零基础入门Python?(第一节)
- 4g内存 mysql_mysql 4G内存配置表
- 圣诞表白html,Pyhton表白代码——浪漫圣诞节
- 团体项目搜查令更新一
- 信息学奥赛一本通 1335:【例2-4】连通块
- 终于弄懂了origin批量制图
- WinXP系统下Opencms的安装与配置
- 对未来的打算和本专业的认识
- 只有毅力和决心无往不利