用django和mercurial进行进化突变
aino-mutations的Python项目详细描述
aino突变是一个工具,可以在某个版本调用突变脚本。 一个多变的仓库。变异脚本通常是执行 某种类型的数据库重构。aino convert不智能:
- 不提供自省
- 变异脚本旨在使用原始sql进行模式迁移 这意味着您将被锁定到一个特定的数据库引擎,即 当然是你自己的选择。
为什么?
Aino突变解决了在正确的 环境。通常当你做突变时,你想执行一些逻辑 插入或删除数据。为了执行这个逻辑,我们需要环境 其中变异是为之而写的。自动转换更新 在修订版中添加了变异的Mercurial存储库 执行变异脚本。
要求
- django,支持多数据库,v1.2+,或者trunk,直到发布。
- Mercurial,仅在v1.5中测试
- 由Mercurial存储库管理的Django项目
安装
- 将mutations添加到pythonpath中
- 将mutations添加到INSTALLED_APPS
配置
默认情况下,在的mutations子目录中查找变异脚本 您的mercurial存储库根目录,可以通过设置^{tt5}来更改$ 在你的设置文件中。注意MUTATIONS_ROOT应该是相对的 指向存储库根目录的目录路径。
用法
AINO突变分离不同数据库的突变,因此 你需要指定你用你的变异影响的数据库。 添加突变:
- 将python文件(变异)添加到MUTATIONS_ROOT/alias/ 其中alias是设置文件中使用的别名 (默认值称为default)。
- 将文件添加到存储库:hg add path/to/mutation
- 提交:hg ci -m"my first mutation"
- 现在运行变异:python manage.py mutate
突变
突变只是普通的python文件,可以随心所欲。 为了方便起见,有一些局部变量传递给变异脚本:
- cursor:当前数据库的游标实例
- commit_unless_managed只是 django.db.transaction.commit_unless_managed
- dry:如果使用--dry选项运行mutate,则为真。 它可以用来向用户显示一些信息。
常见问题解答
- 我创建了一个错误的突变,我该怎么办?
- 您只需将其从存储库中删除即可: hg rm path/to/mutation; hg ci -m"no more bad code"
- 在提交之前,我想尝试一个变异,我该怎么做?
- 运行:python manage.py runmutation path/to/mutation
- 我的django项目位于部署环境中,我是否仍可以使用 艾诺突变?
- 解决这一问题的最佳方法,因为aino突变可能会更新project 在执行变异时,最好将文件修改到某个版本 访问相同数据库时,将存储库克隆到其他位置。