使用Django和Mercurial进行演化式变更
项目描述
aino-mutations 是一个工具,用于在mercurial仓库的特定版本处调用变更脚本。变更脚本通常是执行某种数据库重构的脚本。aino-convert 并不智能
不提供内省
变更脚本旨在使用原始SQL进行模式迁移,这意味着您将锁定到特定的数据库引擎,当然,这是您自己的选择。
为什么?
aino-mutations 解决了在正确环境中运行变更的问题。通常当您进行变更时,您想执行某些逻辑来插入或删除数据。为了执行此逻辑,我们需要变更所编写的环境。aino-convert 会自动将mercurial仓库更新到添加变更的版本,并执行变更脚本。
要求
Django具有多数据库支持,v1.2+,或直到发布前的trunk。
Mercurial,仅测试了v1.5
由mercurial仓库管理的Django项目
安装
将 mutations 添加到您的pythonpath
将 mutations 添加到 INSTALLED_APPS
配置
默认情况下,变更脚本在mercurial仓库根目录的 mutations 子目录中查找,您可以通过在设置文件中设置 MUTATIONS_ROOT 来更改此设置。请注意,MUTATIONS_ROOT 应该是相对于仓库根目录的相对目录路径。
用法
aino-mutations 会根据不同的数据库分离变更,因此您需要指定您的变更影响的是哪个数据库。要添加变更
将python文件(变异)添加到 MUTATIONS_ROOT/alias/ 中,其中 alias 是您在设置文件中使用的别名(默认名为 default)。
将文件添加到仓库中: hg add path/to/mutation
提交: hg ci -m"我的第一次变异"
现在运行变异: python manage.py mutate
变异
变异只是普通的python文件,可以执行任何您想做的事情。为了方便,变异脚本中传递了一些局部变量
cursor:当前数据库的游标实例
commit_unless_managed 是 django.db.transaction.commit_unless_managed 的快捷方式
dry:如果使用 --dry 选项运行 mutate(这可以用于向用户显示一些信息),则此值将为True。
常见问题解答
我创建了一个错误的变异,我该怎么办?
您只需将其从仓库中删除即可: hg rm path/to/mutation; hg ci -m"不再有坏代码"
我想在提交之前尝试变异,我该如何操作?
运行: python manage.py runmutation path/to/mutation
我的django项目在部署环境中,我还能使用aino-mutations吗?
由于aino-mutations在执行变异时可能会更新项目文件到某个版本,因此最好的方法是克隆仓库到另一个位置,同时访问相同的数据库。
项目详细信息
aino-mutations-0.1.0.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 946559acaac97db3878cc504a2bb6e9970f9012753779d97f6bf42d8e2e011eb |
|
MD5 | 1a326724de33e052c336c7c0463bf265 |
|
BLAKE2b-256 | e8af87b880b131fe79759975a3da0c3070c8e0c549c4d09e280fb490050a5e6c |