资讯专栏INFORMATION COLUMN

alembic生成数据库升级脚本

CastlePeaK / 3301人阅读

摘要:可以处理定义的数据库的升级生成可配置的升级脚本编辑文件来建立与数据库实体之间的关联改成和自己的数据库相对应编辑来与建立关联定义了数据库与类之间的映射为了关联与需要修改在定义数据库表时我们需要继承这时可以改成即可如果是用的库可以改成处理升级在

alembic可以处理sqlalchemy定义的数据库的升级.

1. 生成可配置的升级脚本 alembic init update
.
├── alembic.ini
└── update
    ├── env.py
    ├── env.pyc
    ├── README
    ├── script.py.mako
    └── versions
2. 编辑alembic.ini文件来建立alembic与数据库实体之间的关联
sqlalchemy.url = driver://user:pass@localhost/dbname

改成和自己的数据库engine相对应

3. 编辑env.py来与sqlalchemy建立关联

sqlalchemy定义了数据库与类之间的映射, 为了关联alembic与sqlalchemy, 需要修改target_metadata = None

在定义数据库表时, 我们需要继承Base = declarative_base(), 这时可以改成target_metadata = Base.metadata即可. 如果是用的elixir库, 可以改成target_metadata = elixir.metadata

4. alembic处理升级

alembic在处理数据库升级时, 需要知道当前的数据库更新到了哪个升级脚本, 在数据库中会有alembic_version记录这一项, 如果没有的话, 需要运行alembic history来查看当前的脚本之间的前后继关系

c13aac80dc0d -> a6bd6b66dc68 (head), v1.0.6
8af8ba526412 -> c13aac80dc0d, 12_27
c07041b991dd -> 8af8ba526412, v1.0.4
d9e1223a5cc6 -> c07041b991dd, 002_update_for_12.2
 -> d9e1223a5cc6, v1.0.2

如果我确定我当前的数据库是由c13aac80dc0d对应的脚本升级上来的, 那么执行alembic stamp c13aac80dc0d来更新数据库, 表明当前数据库对应到了这个脚本, 此时可以执行alembic current来查看确实是这个
版本.

之后, 可以基于当前的数据库与我们已经定义好的表之间自动生成升级脚本alembic revision --autogenerate -m "create update files", 可能还需要改一些语句, 或者数据库表之间的关系的调整还涉及到数据>记录的内容更改与填充.

5. 升降级命令
alembic upgrade +1
alembic downgrade -1
6. 建议

不要自己去写python或者Sql脚本创建数据库实体, 建议从一开始就用alembic操作数据库. 就是说在项目里面跟数据库相关的操作, 只需要定义好了orm, 之后代码里面做增删查改就够了. 其它的创建数据库, 创建表
, 更改表结构的操作都由alembic来接管.

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/38348.html

相关文章

  • Python数据模型构建和迁移方案:SQLAlchemy&Alembic

    摘要:当使用到后者这类微型框架时,根据业务场景不同,如果需要处理模型的建立升级和迁移的问题,可以考虑下接下来要介绍的和。这时候检查数据库,可以发现生成了张表,升级工作就完成了。而我在使用的实际项目中是操作的原生,异步类型的配合使用留待以后探究。 背景 Python的世界里有许多web框架:比如大而全的 Django, 提供了模型定义迁移,到路由处理,再到视图的渲染等整套功能;比如小巧灵活的F...

    李增田 评论0 收藏0
  • sqlalchemy学习笔记

    摘要:是的一个数据库工具,提供了强大的对象模型间的转换,可以满足绝大多数数据库操作的需求,并且支持多种数据库引擎,,等,在这里记录基本用法和学习笔记一安装通过安装二使用首先是连接到数据库,支持多个数据库引擎,不同的数据库引擎连接字符串不一样,常用 SQLAlchemy是python的一个数据库ORM工具,提供了强大的对象模型间的转换,可以满足绝大多数数据库操作的需求,并且支持多种数据库引擎(...

    YPHP 评论0 收藏0
  • 通过demo学习OpenStack开发所需的基础知识 -- 据库(2)

    摘要:在实际项目中,这么做肯定是不行的实际项目中不会使用内存数据库,这种数据库一般只是在单元测试中使用。接下来,我们将会了解中单元测试的相关知识。 在上一篇文章,我们介绍了SQLAlchemy的基本概念,也介绍了基本的使用流程。本文我们结合webdemo这个项目来介绍如何在项目中使用SQLAlchemy。另外,我们还会介绍数据库版本管理的概念和实践,这也是OpenStack每个项目都需要做的...

    mingzhong 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<