Day057 数据库迁移工具alembic介绍及使用

数据库迁移工具alembic介绍_alembic使用:

1.alembic介绍:


  • alembic是sqlalchemy的作者开发的,用来做OMR模型与数据库的迁移与映射,
  • alembic使用方式跟git有点了类似,
  • alembic的所有命令都是以alembic开头,
  • alembic的迁移文件也是通过版本进行控制的,


2.alembic安装:

pip install alembic


3.alembic使用:

1.使用sqlalchemy创建好模型类:

如创建一个models.py模块,然后在里面定义需要的模型类,代码如下:

        from sqlalchemy import Column,String,Integer,create_engine
from sqlalchemy.ext.declarative import declarative_base

HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'alembic_demo'
USERNAME = 'root'
PASSWORD = 'root'

DB_URI ="mysql+pymysql://{username}:{password}@{host}:{port}/{db}?charset=utf8".format(username=USERNAME,password=PASSWORD,host=HOSTNAME,port=PORT,db=DATABASE)

engine = create_engine(DB_URI)
Base = declarative_base(engine)

class User(Base):
    __tablename__ = 'user'
    id = Column(Integer,primary_key=True,autoincrement=True)
    uname = Column(String(50),nullable=False)
    country = Column(String(50))

# ORM -> 迁移文件 -> 映射到数据库中
# import os
# print(os.path.dirname(__file__))
      

2. 使用alembic创建一个仓库(初始化仓库):

1.打开dos系统界面

2.cd到当前项目目录中,注意:如果想要使用alembic,则需要先进入到安装了alembic的虚拟环境中,不然就找不到这个命令。

3.然后执行命令 “alembic init [仓库的名字,推荐使用alembic]”


3. 修改配置文件:

在`alembic.ini`中,给`sqlalchemy.url`项设置数据库的连接方式。方式跟sqlalchemy的方式是一样的。

sqlalchemy.url = driver://user:pass@localhost/dbname,

给`sqlalchemy.url`项设置数据库的连接操作为:

        sqlalchemy.url = mysql+pymysql://root:root@localhost/alembic_demo?charset=utf8
      

为了使用模型类更新数据库,需要在`alembic/env.py`文件中设置target_metadata项,默认为target_metadata=None。

需要将`target_metadata`的值设置为模型`Base.metadata`,但是要导入`models`

使用sys模块和os模块把当前项目的路径导入到path中:

导入`models`的操作为:

        import sys,os
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
import models
      

设置target_metadata项操作为:

        target_metadata = models.Base.metadata
      

4.自动生成迁移文件:

使用alembic revision --autogenerate -m "提示信息"将当前模型中的状态生成迁移文件。


5.将生成的迁移文件映射到数据库中:

使用alembic upgrade head将刚刚生成的迁移文件,真正映射到数据库中。

同理,如果要降级,那么使用alembic downgrade head。


6. 以后如果修改了模型,重复4、5步骤。


4.常用alembic命令和参数解释:

1. init:创建一个alembic仓库。

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

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

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

5. upgrade:将指定版本的迁移文件映射到数据库中,会执行版本文件中的upgrade函数。

如果有多个迁移脚本没有被映射到数据库中,那么会执行多个迁移脚本。

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

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

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

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

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


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


5.常见错误及解决办法:

1. 创建新版本时报错 FAILED: Target database is not up to date.

原因:主要是heads和current不相同。current落后于heads的版本。

解决办法:将current移动到head上。alembic upgrade head


2. 创建新版本时报错 KeyError: 'bb747b02cda0' 或者 FAILED: Can't locate revision identified by 'a65ff5195bc0'

原因:数据库中存的版本号不在迁移脚本文件中,建议最好不要删除之前的迁移脚本

解决办法:删除versions中所有的迁移文件,删除数据库所有表。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来数据库使用类的实例中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 达式语言: SQLAlchemy 提供了一个丰富的 SQL 达式语言,允许开发者以 Python 达式的方式编写复杂的 SQL 查询。 达式语言提供了对 SQL 语句的灵活控制,同保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除操作执行额外的逻辑。
Alembic是由SQLAlchemy的作者编写的数据库迁移工具。它可以帮助我们在不破坏数据的情况下更新数据库的结构。使用Alembic可以向数据库发出ALTER语句以更改的结构和其他结构。使用Alembic进行数据库迁移的过程是通过创建迁移环境、生成迁移文件、同步数据库等步骤来完成的。 具体使用Alembic进行数据库迁移的步骤如下: 1. 安装Alembic使用pip install alembic命令进行安装。 2. 初始化迁移环境:使用alembic init migrations命令初始化迁移环境,创建alembic.ini文件和env.py文件。 3. 修改配置:修改alembic.ini配置文件,将sqlalchemy.url的值配置为数据库连接字符串。 4. 生成迁移文件使用alembic revision -m "first comment"命令生成迁移文件,可以通过--autogenerate选项参数来自动生成迁移脚本。 5. 同步数据库使用alembic upgrade head命令将数据库结构更新到最新版本。 除了上述步骤外,还可以使用其他命令进行数据库迁移的管理和操作: - 查看当前数据库版本:使用alembic current命令可以查看数据库当前所处的版本。 - 查看迁移历史:使用alembic history命令可以查看项目目录中的迁移脚本信息。 - 更新数据库到指定版本:使用alembic upgrade 版本号命令可以将数据库更新到指定的版本。 - 降级数据库使用alembic downgrade 版本号命令可以将数据库降级到指定的版本。 - 离线更新:使用alembic upgrade 版本号 --sql > migration.sql命令可以将数据库更新生成SQL脚本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值