【Flask】扩展:ORM迁移

ORM迁移

面向对象编程把所有实体看成对象(object),关系型数据库则是采用实体之间的关系(relation)连接数据。

ORM 就是通过实例对象的语法,完成关系型数据库的操作的技术,是”对象-关系映射”(Object/Relational Mapping) 的缩写。

alembic库

简介

官方手册地址:https://alembic.sqlalchemy.org/en/latest/

alembicsqlalchemy的作者开发的。用来做OMR模型与数据库的迁移与映射。alembic使用方式跟git有点了类似,表现在两个方面。

  • • alembic的所有命令都是以alembic开头

  • • alembic的迁移文件也是通过版本进行控制的

$ pip install alembic

参考示例

  • • 初始化仓库初始化alembic仓库,在终端中,cd项目目录下,执行下列命令,创建一个名为alembic的仓库$ alembic init alembic

  • • 创建模型(ORM)类

 from sqlalchemy import Column,Integer,String,create_engine,Text
 from sqlalchemy.orm import sessionmaker
 from sqlalchemy.ext.declarative import declarative_base
 
 Base = declarative_base()
 class User(Base):
     __tablename__ = 'user'
 
     id = Column(Integer,primary_key=True, autoincrement=True)
     username = Column(String(20),nullable=False)
     password = Column(String(100),nullable=False)
 
 class Article(Base):
     __tablename__ = 'article'
 
     id = Column(Integer,primary_key=True)
     title = Column(String(100),nullable=False)
     content = Column(Text, nullable=False)
  • • 修改配置文件

    • • 在alembic.ini中设置数据库的连接,sqlalchemy.url = driver://user:pass@localhost/dbname,比如以mysql数据库为例,则配置后的代码为。

   sqlalchemy.url = mysql+mysqldb://root:root@localhost/alembic_demo?charset=utf8
  • • 为了使用模型类更新数据库,需要在env.py文件中设置target_metadata,默认为target_metadata=None。使用sys模块把当前项目的路径导入到path

  import os
  import sys
  sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/../")
  from models import Base
  ... #省略代码
  target_metadata = Base.metadata # 设置创建模型的元类
  ... #省略代码
  • • 生成迁移文件使用命令alembic revision --autogenerate -m "message"可以将当前模型中的状态生成迁移文件。

  • • 更新数据库使用alembic upgrade head将刚刚生成的迁移文件,真正映射到数据库中。同理,如果要降级,那么使用alembic downgrade head

命令和参数解释

  • • init:创建一个alembic仓库。

  • • revision:创建一个新的版本文件。

  • • –autogenerate:自动将当前模型的修改,生成迁移脚本。

  • • -m:本次迁移做了哪些修改,用户可以指定这个参数,方便回顾。

  • • upgrade:将指定版本的迁移文件映射到数据库中,会执行版本文件中的upgrade函数。如果有多个迁移脚本没有被映射到数据库中,那么会执行多个迁移脚本。

  • • [head]:代表最新的迁移脚本的版本号。

  • • downgrade:会执行指定版本的迁移文件中的downgrade函数。

  • • heads:展示head指向的脚本文件版本号。

  • • history:列出所有的迁移版本及其信息。

  • • current:展示当前数据库中的版本号。

另外,在你第一次执行upgrade的时候,就会在数据库中创建一个名叫alembic_version表,这个表只会有一条数据,记录当前数据库映射的是哪个版本的迁移文件。

经典错误

错误描述 原因 解决办法
FAILED: Target database is not up to date. 主要是headscurrent不相同。current落后于heads的版本。 将current移动到head上。alembic upgrade head
FAILED: Can't locate revision identified by '77525ee61b5b' 数据库中存的版本号不在迁移脚本文件中 删除数据库的alembic_version表中的数据,重新执行alembic upgrade head

来源:网络

欢迎关注我的公众号“壹葉筆記”,技术文章第一时间推送。


原文始发于微信公众号(壹葉筆記):【Flask】扩展:ORM迁移

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/36098.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之家——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!