数据库及ORM

alembic 版本管理

  1. 要使用alembic 首先要安装alembic 管理工具, 使用pip工具进行安装。会自动安装三个依赖包

    pip install alembic
  2. 执行初始化会生成包括alembic.ini文件在内的一些文件。
           
            其中:
            alembic.ini 提供的是基本配置, 比如数据库连接的配置
            env.py 每次执行alembic都会加载该模块,配置了SqlAlembic Models的连接
            version 该目录下存放是在将来生成的版本
            script.py.mako 迁移脚脚本生成模板在环境workspace中新建一个文件件, 然后在文件夹内执行:

    mkdir alembic_study
    cd alembic_study
    alembic init <the alembic_dic>   ex: alembic init alembic

  3. 修改数据库连接,在此之前需要在环境上安装好数据库,并创建出自己的表
    mysql -u root -p
    create database test_alembic;
    show databases; 


    例如现在是的数据库使用:test_alembic
    则在alembic.ini中配置数据库连接, 用户名和密码根据实际情况进行定义。

  4. 在代码中创建Modules目录和models.py文件,如下所示:

    models.py文件内容拷贝网上他人写好的模板即可

    from sqlalchemy import Column, Integer, String, ForeignKey, Date, Table, Text
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy.orm import relationshipBase = declarative_base()useridToRoleid = Table('useridToRoleid', Base.metadata,Column('userid', Integer, ForeignKey('users.id')),Column('roleid', Integer, ForeignKey('roles.id')),)roleidToIdentityid = Table('roleidToIdentityid', Base.metadata,Column('roleid', Integer, ForeignKey('roles.id')),Column('identityid', Integer, ForeignKey('identities.id')),)articleidToTagid = Table('articleidToTagid', Base.metadata,Column('articleid', Integer, ForeignKey('articles.id')),Column('tagid', Integer, ForeignKey('tags.id')),)class User(Base):__tablename__ = 'users'id = Column(Integer, primary_key=True)username = Column(String(32), nullable=False, unique=True)password = Column(String(32), nullable=False)email = Column(String(32), nullable=False, unique=True)roles = relationship('Role', secondary=useridToRoleid, backref='users')def __repr__(self):return "<%s users.username: %s>" % (self.id, self.username)class Role(Base):__tablename__ = 'roles'id = Column(Integer, primary_key=True)name = Column(String(16), nullable=False)identity = relationship('Identity', secondary=roleidToIdentityid, backref='roles')def __repr__(self):return "<%s roles.name: %s>" % (self.id, self.name)class Identity(Base):__tablename__ = 'identities'id = Column(Integer, primary_key=True)name = Column(String(16))def __repr__(self):return "<%s identities.name: %s>" % (self.id, self.name)class Category(Base):__tablename__ = "categories"id = Column(Integer, primary_key=True)name = Column(String(16), nullable=False)title = relationship('Article', backref='category')def __repr__(self):return "<%s categories.name: %s" % (self.id, self.name)class Tag(Base):__tablename__ = "tags"id = Column(Integer, primary_key=True)name = Column(String(16))def __repr__(self):return "<%s categories.name: %s" % (self.id, self.name)class Article(Base):__tablename__ = "articles"id = Column(Integer, primary_key=True)title = Column(String(50))description = Column(String(300))content = Column(Text)click_count = Column(Integer, default=0)category_id = Column(Integer, ForeignKey('categories.id'))tags = relationship('Tag', secondary=articleidToTagid, backref='articles')def __repr__(self):return "<%s categories.name: %s" % (self.id, self.title)
  5. 修改env.py配置文件,将target_metdata =None 替换掉
    这样alembic就能获取自己项目中的models中定义的信息

  6. 在alembic.ini文件所在的路径先执行创建数据库版本的文件, alembic reversion -m "注释"
    alembic revision --autogenerate -m "init the db"

    生成如下所示:versions目录下生成一个文件,格式是:版本号_注释.py文件

  7. 变更数据库,如果修改了models.py中的表结构, 比如增加了新的字段

    在user表中新增了一个telphone的字段。要经过两个步骤就可再生成一个version文件

    alembic upgrade head  #每次要创建新的版本,需要执行数据库升级到新版本的命令,才能继续更新版本
    alembic revision --autogenerate -m "add telphont for role"

  8. head 指的是最新版本,base指的是最初版本, 需要对数据库升级使用upgrade, 降级则使用downgrade
  9. 将数据库降级
    降级到最初的版本

    alembic downgrade base

    将数据库降级到执行版本: alembic downgrade 版本号

    alembic downgrade 1234567890
  10. 查询当前版本号
    在数据库中有一个alembic_version的字段,表示的是最后一个版本的版本号
  11. versions中的版本文件控制升级和降级

    这是第一个version文件,所有只有revsion, 表示当前版本的版本号,没有父版本down_revison
    对于刚才生成的第二个文件

    这个version文件有父文件:down_revision, 即它是从哪个version文件升级过来的,指向的是它上一级的文件。
    执行升级和降级就是通过revision和down_revision文件来实现的
  12. versions 内容

    upgrade()表示该版本在升级的时候添加的内容,downgrade()表示该版本在回退时候要删除的内容

版本升级与回退问题

  1. 不同分支出现version文件反合的问题

Python使用Alembic框架进行数据库版本管理相关推荐

  1. 在线车辆推荐网 Python语言+Django框架+Mysql数据库 基于用户、物品的协同过滤推荐算法 开发在线汽车推荐系统 二手车网站推荐系统 分布式大数据、机器学习、人工智能开发

    在线车辆推荐网 Python语言+Django框架+Mysql数据库 基于用户.物品的协同过滤推荐算法 开发在线汽车推荐系统 二手车网站推荐系统 分布式大数据.机器学习.人工智能开发 CarRecom ...

  2. 记录Python使用Django框架操作数据库遇到的问题与流程

    ** python学习使用Django框架连接mysql数据库的步骤和遇到的一些问题 ** 配置数据库: 项目的settings.py文件的77行修改如下: DATABASES = {'default ...

  3. python的flask框架mysql数据库迁移

    最近在学习<flaskweb开发>,教程里采用 sqlite 数据库,我自己用的是mysql,在到数据库迁移部分有点懵了,想跳过去,但是到后面发现很不方便,于是折腾了好长时间,网上也找不到 ...

  4. python接口自动化测试框架链接数据库_python接口自动化测试框架实现之操作mysq数据库...

    python操作mysql数据库需要使用到mysqlclient库. 安装:pip install mysqlclient python连接mysql数据库分以下步骤: 1.与mysql建立连接: 2 ...

  5. 使用alembic进行openstack数据库版本管理

    在线更新 1. alembic init <YOUR_DIR># 此处,我用的是alembic_v 2.修改alembic.ini.如下: sqlalchemy.url = driver: ...

  6. 基于python+django框架+Mysql数据库的校园二手书籍交易系统设计与实现

    项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于web网页的校园二手书籍交易系统,整个网站项目使用了B/S架构,基于python的Django框架下开发:用户通过登录网站,查询二手交易商品 ...

  7. 基于python+django框架+Mysql数据库的在线电子书阅读系统设计与实现

    项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于web网页的电子书阅读系统,整个网站项目使用了B/S架构,基于python的Django框架下开发:管理员通过后台录入信息.管理信息,设置网 ...

  8. 基于python+django框架+Mysql数据库的跳蚤市场二手物品交易系统设计与实现

    项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于web网页的二手物品交易系统,整个网站项目使用了B/S架构,基于python的Django框架下开发:用户通过登录网站,查询二手交易商品,购 ...

  9. 基于python+django框架+Mysql数据库的多用户B2C商城平台系统设计与实现

    项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于web网页的多用户商城系统,整个网站项目使用了B/S架构,基于python的Django框架下开发:用户通过登录网站,查询商品,购买商品,下 ...

最新文章

  1. unity3d版本控制的设置方法(SVN)
  2. 吴裕雄--天生自然 HADOOP大数据分布式处理:修改CenterOS 7系统时间为北京时间
  3. 《剑指offer》c++版本 11. 旋转数组的最小数字
  4. css 倒三角_【译】改善 CSS 的 10 个最佳实践
  5. 四层交换机是什么?有什么用?与二层/三层交换机有何区别?
  6. Cpp 对象模型探索 / 静态联编和动态联编
  7. iToken----开发前准备
  8. linux板级初始化
  9. 提交表单数据到数据库_普通表单不仅适用于数据库
  10. [转]Linux下VSCode常用的快捷键
  11. 微信小程序下载图片保存到本地
  12. dell 2u服务器型号,IBM、HP、Dell比拼主流2U双路服务器
  13. 医院信息化建设(2)---医疗业务
  14. IOS逆向(9)DebugServer + LLDB
  15. Android下图片清晰度识别
  16. css中aspect,CSS属性之aspect-ratio
  17. 如何查看linux的日志
  18. 微信诞生8年了,但还有8亿人不懂微信聊天礼仪
  19. VSCODE配置C/C++
  20. zookeeper集群节点个数为什么最好是2n+1

热门文章

  1. 展晓凯:“零经验”的我与唱吧从零到四亿
  2. 计算机组成原理之CPU以及高速缓存
  3. 计算机组成原理复试面试问题
  4. 制冷与空调设备安装维修相关理论知识在线模拟考试题库
  5. 8通道1:2或2:1双向多路复用器/多路解复用器,GRANDMICRO有容微的ASW3810可以代完美替
  6. 手机上计算机功能,手机上有计算器的赶紧看看,这个功能不说很多人不知道,赶紧告诉身边人...
  7. STMCU中文官网发布了最新的云接入培训课件
  8. 2007年中国互联网网站市场表现研究报告
  9. 每月一书(202105):《原则》
  10. 禁止流氓软件开机自启