gpt4 book ai didi

python - 自动数据库重构以与 OpenERP 中重构的 python 代码协调一致?

转载 作者:搜寻专家 更新时间:2023-10-30 23:11:01 24 4
gpt4 key购买 nike

当我重构 Python 类(例如更改字段的名称/类型)时,在数据库中反射(reflect)这些更改的最佳方法是什么?

目前,我手动运行 SQL 脚本将数据传输到新列并修剪旧列,但这很慢且容易出错。

Java 的 Liquibase 之类的东西吗?

谢谢,安东

最佳答案

OpenERP ORM 能够将数据库模式与模型的python 定义同步,但它不能执行复杂的迁移操作。其目的是创建或更新支持最新版本模型所需的数据库表和列,即允许插入、更新和读取记录。

作为此同步的一部分,它支持简单的模式更改:只要列的名称和类型没有更改,ORM 就会尝试更新 SQL 约束(NOT NULL、UNIQUE、FOREIGN KEY 等)和 ONDELETE 规则(如果有)。

如果类型发生变化,旧列将被重命名为不受影响(但保留下来以便您可以手动迁移数据),并且将创建一个新的适当列。如果您想要迁移数据 [*],您将需要手动迁移操作。

如果唯一改变的是列的名称,您可以使用 oldname 给 ORM 一个提示列属性。它告诉 ORM 需要重命名旧列而不是创建新列。例如,此列定义将使 ORM 尝试重命名 partner_idcustomer_id如果customer_id列丢失:

'customer_id': fields.many2one('res.partner', 'Customer', oldname='partner_id'),

您可以通过使用 `-u <module> -d <database> 启动服务器来启动同步逻辑。或者点击该数据库设置菜单中相应模块的“更新”按钮( --update-u 的同义词,但一定要传递 -d 让它直接在数据库上开始同步).

请注意,您不应使用 oldname在开发过程中尝试不同的数据库模式定义时的参数。此选项主要用于跟踪给定模块的主要版本之间的字段重命名。对于进行中的开发,您不关心跟踪所有迭代,因此使用 -u就足够了,无论如何您都应该定期在新的空数据库上重新开始。


[*] 对于将您自己的迁移脚本嵌入到您的模块中,ORM 将根据检测到的模块版本自动执行它们的支持有限且大部分未记录。不幸的是,了解这项工作的最佳方式是阅读 the source code .

关于python - 自动数据库重构以与 OpenERP 中重构的 python 代码协调一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20272148/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com