四十八:数据库之alembic常用命令和经典错误的解决办法
常用命令:
1、init:创建一个alembic仓库
2、reversion:创建一个新的版本
3、--autogenerate:自动将当前模型的修改,生成迁移脚本
4、-m:message,可以记录本次迁移做了哪些修改,
5、upgrade:将指定版本的迁移文件映射到数据库中,会执行版本文件中的upgrade函数,如果有多个迁移脚本没有被映射到数据库,name会执行多个映射脚本
6、head:代表最新的迁移脚本的版本号
7、downgrade:会执行指定版本的迁移文件中的downgrade函数
8、heads:展示head指向的脚本文件版本号
9、history:列出所有的迁移版本及其信息
10、current:展示当前数据库中的版本号
经典错误:
1、FAILED:Target database is not up to date
原因:heads和current不同,current落后于heads的版本
解决办法:将current移动到head上:alembic upgrade head
2、FAILED:Can't locate revision identified by 'xxxx'
原因:数据库中存在的版本号不存在迁移脚本中
解决办法:删除数据库的alembic_version表中的数据,重新执行alembic upgrade head
3、执行alembic upgrade head时报某个表已存在的错误
原因:执行这个命令的时候,会执行所有的迁移脚本,因为数据库中已经存在了这个表,然后迁移脚本中又包含了创建表的代码
解决办法:1.删除versions中所有的迁移文件、2.修改迁移文件脚本中创建表的代码为pass
准备工作

from sqlalchemy import Column, String, Integer, create_engine
from sqlalchemy.ext.declarative import declarative_base # 数据库类型+连接数据库的插件,这里使用的pymysql
DB_URI = 'mysql+pymysql://root:123456@127.0.0.1:3306/test' engine = create_engine(DB_URI)
Base = declarative_base(engine) class User(Base):
__tablename__ = 'user'
id = Column(Integer, primary_key=True, autoincrement=True)
username = Column(String(50), nullable=False) def __repr__(self):
return f'username: {self.username}' Base.metadata.drop_all() # 删除所有表
Base.metadata.create_all() # 创建表
alembic revision --autogenerate -m 'first_commit'



alembic upgrade head(最新) 、 alembic upgrade version(指定版本)


增加字段



减少字段



查看历史版本

查看当前版本

四十八:数据库之alembic常用命令和经典错误的解决办法的更多相关文章
- alembic常用命令和经典错误解决办法
- 【Mongodb教程 第十八课 】MongoDB常用命令 数据库命令 集合操作命令
面向文档的 NoSQL 数据库主要解决的问题不是高性能的并发读写,而是保证海量数据存储的同时,具有良好的查询性能. 条件操作符 <, <=, >, >= 这个操作符就不用多 ...
- 十八. Python基础(18)常用模块
十八. Python基础(18)常用模块 1 ● 常用模块及其用途 collections模块: 一些扩展的数据类型→Counter, deque, defaultdict, namedtuple, ...
- NeHe OpenGL教程 第四十八课:轨迹球
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- SQL注入之Sqli-labs系列第四十七关,第四十八关,第四十九关(ORDER BY注入)
0x1 源码区别点 将id变为字符型:$sql = "SELECT * FROM users ORDER BY '$id'"; 0x2实例测试 (1)and rand相结合的方式 ...
- 搜索引擎--范例:谈谈django--mysql数据库的一些常用命令
现在基本没有什么能离得开数据库了,django我一直用的都是mysql的数据库,这次和大家说说django--mysql数据库的一些常用命令吧 1:命令行登陆mysql C:\Users\Admini ...
- (十四--十五)数据库查询优化Part I
(十四--十五)数据库查询优化Part I 如果理解的有问题.欢迎大家指出.这也是我在看课记得笔记..可能会有很多问题 查询优化的重要性 请记住用户只会告诉DMBS他们想要什么样的结果,而不会告诉他们 ...
- 《手把手教你》系列技巧篇(四十八)-java+ selenium自动化测试-判断元素是否可操作(详解教程)
1.简介 webdriver有三种判断元素状态的方法,分别是isEnabled,isSelected 和 isDisplayed,其中isSelected在前面的内容中已经简单的介绍了,isSelec ...
- 第四十八个知识点:TPM的目的和使用方法
第四十八个知识点:TPM的目的和使用方法 在检查TPM目的之前,值得去尝试理解TPM设计出来的目的是为了克服什么样的问题.真正的问题是信任.信任什么?首先内存和软件运行在电脑上.这些东西能直接的通过操 ...
随机推荐
- Arch Linux 安装rust
Arch Linux 安装rust 0. 参考 Rust Toolchain 反向代理使用帮助 1. 安装 安装rustup和toolchain yaourt -S rustup rustup ins ...
- 格式化json扩展
json-handle 直接在chrome应用商店搜索JSON-handle或者去github搜索可用插件即可
- docker容器内安装 rz、sz
操作系统:ubuntu rz.sz命令找不到: 执行命令:apt-get update && apt-get install lrzsz
- java8学习之收集器用法详解与多级分组和分区
收集器用法详解: 在上次已经系统的阅读了Collector收集器的Javadoc对它已经有一个比较详细的认知了,但是!!!它毕境是只是一个接口,要使用的话还得用它的实现类,所以在Java8中有它进行了 ...
- 使用putty对linux与windows之间的文件传输
一.putty下载 首先下载pytty,解压开发现里面有plink.exe pscp.exe psftp.exe putty.exe puttygen.exe puttytel.exe等可执行文件 进 ...
- 498. Diagonal Traverse
题目思路 题目来源 C++实现 class Solution { public: vector<int> findDiagonalOrder(vector<vector<int ...
- eclipse导入tomcat时Unknown version of Tomcat was specified
Unknown version of Tomcat was specified 的原因有2种可能: 1 路径不是真正的路径,可能是其子路径,要找到bin路径. 2 安装目录没有访问权限. 我的就是第2 ...
- 服务器iis跟server-u 冲突
server-u 一定要配置域才可以监听21端口,不然一直ping 都是无效的.
- Cookie相关工具方法
/** * InputStream转化为byte[]数组 * @param input * @return * @throws IOException */ public static byte[] ...
- DOM修改
㈠DOM标准 核心DOM: HTML DOM ...