摘要:默认的可以增量式创建数据库缺失的表,但是无法做到修改已有的表结构,或删除代码中已经移除的表。这个时候我们就需要用到这个库。
SQLAlchemy默认的create_all()可以增量式创建数据库缺失的表,但是无法做到修改已有的表结构,或删除代码中已经移除的表。这个时候我们就需要用到Alembic这个SQLAlchemy migrations库。
安装:pip install alembic
官方文档:http://alembic.zzzcomputing.c...
创建一个目录,然后在这个目录下执行
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.metadataBuilding 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
摘要:支持从现有数据库自动生成代码,并支持一对多,一对一,多对多的关联关系。生成整个库的代码指定表保存到指定文件 pip install sqlacodegen sqlacodegen支持从现有数据库自动生成ORM代码,并支持一对多,一对一,多对多的关联关系。 #生成整个库的代码 sqlacodegen sqlite:///Chinook_Sqlite.sqlite #指定表 sqlacod...
摘要:基于反射对象进行查询模块反射这里我们不再使用而是使用扩展模块的获取所有的对象名获取表对象进行操作反射关联关系可以反射并建立表之间的但是建立关联列的命名为例如关于更多信息请详细参看官方文档 示例数据库下载:http://chinookdatabase.codepl...在SQLALchemy中,我们使用反射技术来获取相关database schema信息,如tables,views,in...
摘要:你应该使用工厂类来创建类,因为这确保了配置参数的正确性。对象包含创建数据库连接所需的一切信息,它不会立即创建连接对象,而是会在我们进行具体操作时创建。注意生产环境不要使用这个选项。关于选择的最佳实践使用迭代方式获取所有值,而不是。 定义模式Defining Schema 定义ORM类的4个步骤: 继承declarative_base()函数返回的类 定义__tablename__属性...
摘要:是的一个数据库工具,提供了强大的对象模型间的转换,可以满足绝大多数数据库操作的需求,并且支持多种数据库引擎,,等,在这里记录基本用法和学习笔记一安装通过安装二使用首先是连接到数据库,支持多个数据库引擎,不同的数据库引擎连接字符串不一样,常用 SQLAlchemy是python的一个数据库ORM工具,提供了强大的对象模型间的转换,可以满足绝大多数数据库操作的需求,并且支持多种数据库引擎(...
阅读 582·2021-11-22 14:45
阅读 3070·2021-10-15 09:41
阅读 1554·2021-10-11 10:58
阅读 2797·2021-09-04 16:45
阅读 2605·2021-09-03 10:45
阅读 3238·2019-08-30 15:53
阅读 1221·2019-08-29 12:28
阅读 2133·2019-08-29 12:14