常用命令:
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常用命令和经典错误的解决办法的更多相关文章

  1. alembic常用命令和经典错误解决办法

  2. 【Mongodb教程 第十八课 】MongoDB常用命令 数据库命令 集合操作命令

    面向文档的 NoSQL 数据库主要解决的问题不是高性能的并发读写,而是保证海量数据存储的同时,具有良好的查询性能.  条件操作符 <, <=, >, >=  这个操作符就不用多 ...

  3. 十八. Python基础(18)常用模块

    十八. Python基础(18)常用模块 1 ● 常用模块及其用途 collections模块: 一些扩展的数据类型→Counter, deque, defaultdict, namedtuple, ...

  4. NeHe OpenGL教程 第四十八课:轨迹球

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  5. SQL注入之Sqli-labs系列第四十七关,第四十八关,第四十九关(ORDER BY注入)

    0x1 源码区别点 将id变为字符型:$sql = "SELECT * FROM users ORDER BY '$id'"; 0x2实例测试 (1)and rand相结合的方式 ...

  6. 搜索引擎--范例:谈谈django--mysql数据库的一些常用命令

    现在基本没有什么能离得开数据库了,django我一直用的都是mysql的数据库,这次和大家说说django--mysql数据库的一些常用命令吧 1:命令行登陆mysql C:\Users\Admini ...

  7. (十四--十五)数据库查询优化Part I

    (十四--十五)数据库查询优化Part I 如果理解的有问题.欢迎大家指出.这也是我在看课记得笔记..可能会有很多问题 查询优化的重要性 请记住用户只会告诉DMBS他们想要什么样的结果,而不会告诉他们 ...

  8. 《手把手教你》系列技巧篇(四十八)-java+ selenium自动化测试-判断元素是否可操作(详解教程)

    1.简介 webdriver有三种判断元素状态的方法,分别是isEnabled,isSelected 和 isDisplayed,其中isSelected在前面的内容中已经简单的介绍了,isSelec ...

  9. 第四十八个知识点:TPM的目的和使用方法

    第四十八个知识点:TPM的目的和使用方法 在检查TPM目的之前,值得去尝试理解TPM设计出来的目的是为了克服什么样的问题.真正的问题是信任.信任什么?首先内存和软件运行在电脑上.这些东西能直接的通过操 ...

随机推荐

  1. Linux服务器安装配置JDK

    一.准备工作: 1.登录服务器,切换到root用户(su - root,然后输入密码,按enter),进入根目录:cd / 2.进入要安装jdk的目录,自己可以创建一个java目录,执行命令如下: c ...

  2. MyEclipse使用教程:添加和更新插件(一)

    [MyEclipse CI 2019.4.0安装包下载] 通过Eclipse Marketplace目录或各种更新站点类型添加插件来自定义您的Genuitec IDE. Genuitec提供以下IDE ...

  3. 【转载】Java项目中常用的异常处理情况总结

    一,JDK中与异常相关的类 分析: Java中的异常分类: Throwable类有两个直接子类: Exception:出现的问题是可以被捕获的: Error:系统错误,通常由JVM处理. 可捕获的异常 ...

  4. qt类表

  5. printf计算参数是从右到左压栈的(a++和++a的压栈的区别)

    一.问题 c++代码: #include <iostream> #include <stdio.h> using namespace std; int main(){ ; co ...

  6. NOIP2017提高A组模拟10.6】Biology

    题目 trie 暴力就是对于每个询问的T个字符串 第i个和第i+1个直接个从后暴力枚举每位是否相同, 但这个方法TLE 我们考虑是否可以用更快的方法来求出两个字符串的最长公共后缀. 我们把所有的字符串 ...

  7. Linux培训教程lgzip命令详解和使用实例

    gzip不仅可以用来压缩大的.较少使用的文件以节省磁盘空间,还可以和tar命令一起构成Linux操作系统中比较流行的压缩文件格式.据统计,gzip命令对文本文件有60%-70%的压缩率. 1.命令格式 ...

  8. C# 动态访问webserver 帮助类

    /* 调用方式 * string url = "http://www.webservicex.net/globalweather.asmx" ; * string[] args = ...

  9. luogu 3241 [HNOI2015]开店 动态点分治+二分+vector

    独立写出来+想出来的,1.5h就切了~ 建立点分树,然后用 $vector$ 暴力存所有子节点,然后二分一下子就可以了. #include <cstdio> #include <ve ...

  10. SRM331-CarolsSinging(暴力,位运算)

    Problem Statement When the Christmas dinner is over, it's time to sing carols. Unfortunately, not al ...