资讯专栏INFORMATION COLUMN

Essential SQLAlchemy2th学习笔记之Alembic数据库迁移

cartoon / 2502人阅读

摘要:默认的可以增量式创建数据库缺失的表,但是无法做到修改已有的表结构,或删除代码中已经移除的表。这个时候我们就需要用到这个库。

SQLAlchemy默认的create_all()可以增量式创建数据库缺失的表,但是无法做到修改已有的表结构,或删除代码中已经移除的表。这个时候我们就需要用到Alembic这个SQLAlchemy migrations库。
安装:pip install alembic
官方文档:http://alembic.zzzcomputing.c...

Creating the Migration Environment

创建一个目录,然后在这个目录下执行

alembic init migrations

这便创建了migrations目录,该目录结构如下:
├──
│ ├── README
│ ├── env.py
│ ├── script.py.mako
│ └── versions
└── alembic.ini
env.py配置:

sqlalchemy.url = sqlite:///alembictest.db
from app.db import Base
target_metadata = Base.metadata
Building Migrations

自动生成一个Base Empty Migration

alembic revision -m "Empty Init"

升级数据库到最新版本

alembic upgrade head

自动生成新版本:

alembic revision --autogenerate -m "Added Cookie model"

当然你也可以手动修改它。
一些常见的Alembic操作函数如下:

函数 说明
add_column Adds a new column
alter_column Changes a column type, server default, or name
create_check_constraint Adds a new CheckConstraint
create_foreign_key Adds a new ForeignKey
create_index Adds a new Index
create_primary_key Adds a new PrimaryKey
create_table Adds a new table
create_unique_constraint Adds a new UniqueConstraint
drop_column Removes a column
drop_constraint Removes a constraint
drop_index Drops an index
drop_table Drops a table
execute Run a raw SQL statement
rename_table Renames a table

注意:并不是所有的backend database都支持这些函数,比如SQLite不支持alter_column,drop_column

Controlling Alembic

查看现有数据库的迁移版本:

alembic current

显示历史

alembic history

版本降级

alembic downgrade 34044511331

手动修改数据库的迁移版本:

alembic stamp 2e6a6cc63e9

生成SQL

#Upgrading from 34044511331 to 2e6a6cc63e9  sql
alembic upgrade 34044511331:2e6a6cc63e9 --sql
alembic upgrade 34044511331:2e6a6cc63e9 --sql > migration.sql

更多参考这里

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

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

相关文章

  • Essential SQLAlchemy2th学习笔记自动生成代码

    摘要:支持从现有数据库自动生成代码,并支持一对多,一对一,多对多的关联关系。生成整个库的代码指定表保存到指定文件 pip install sqlacodegen sqlacodegen支持从现有数据库自动生成ORM代码,并支持一对多,一对一,多对多的关联关系。 #生成整个库的代码 sqlacodegen sqlite:///Chinook_Sqlite.sqlite #指定表 sqlacod...

    Sleepy 评论0 收藏0
  • Essential SQLAlchemy2th学习笔记反射Reflection

    摘要:基于反射对象进行查询模块反射这里我们不再使用而是使用扩展模块的获取所有的对象名获取表对象进行操作反射关联关系可以反射并建立表之间的但是建立关联列的命名为例如关于更多信息请详细参看官方文档 示例数据库下载:http://chinookdatabase.codepl...在SQLALchemy中,我们使用反射技术来获取相关database schema信息,如tables,views,in...

    NSFish 评论0 收藏0
  • Essential SQLAlchemy2th学习笔记ORM模块

    摘要:你应该使用工厂类来创建类,因为这确保了配置参数的正确性。对象包含创建数据库连接所需的一切信息,它不会立即创建连接对象,而是会在我们进行具体操作时创建。注意生产环境不要使用这个选项。关于选择的最佳实践使用迭代方式获取所有值,而不是。 定义模式Defining Schema 定义ORM类的4个步骤: 继承declarative_base()函数返回的类 定义__tablename__属性...

    JasonZhang 评论0 收藏0
  • sqlalchemy学习笔记

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

    YPHP 评论0 收藏0

发表评论

0条评论

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