- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
当我重构 Python 类(例如更改字段的名称/类型)时,在数据库中反射(reflect)这些更改的最佳方法是什么?
目前,我手动运行 SQL 脚本将数据传输到新列并修剪旧列,但这很慢且容易出错。
Java 的 Liquibase 之类的东西吗?
谢谢,安东
最佳答案
OpenERP ORM 能够将数据库模式与模型的python 定义同步,但它不能执行复杂的迁移操作。其目的是创建或更新支持最新版本模型所需的数据库表和列,即允许插入、更新和读取记录。
作为此同步的一部分,它支持简单的模式更改:只要列的名称和类型没有更改,ORM 就会尝试更新 SQL 约束(NOT NULL、UNIQUE、FOREIGN KEY 等)和 ONDELETE 规则(如果有)。
如果类型发生变化,旧列将被重命名为不受影响(但保留下来以便您可以手动迁移数据),并且将创建一个新的适当列。如果您想要迁移数据 [*],您将需要手动迁移操作。
如果唯一改变的是列的名称,您可以使用 oldname
给 ORM 一个提示列属性。它告诉 ORM 需要重命名旧列而不是创建新列。例如,此列定义将使 ORM 尝试重命名 partner_id
至 customer_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/
我在 OpenERP 7 中开发了一个自定义模块,我的管理员用户只能看到这个模块。 1-如何让普通用户访问我的自定义模块? 2-解决此问题的步骤是什么。 请举一个详细的例子。 最佳答案 创建一个Sec
我在 OpenERP 7 中开发了一个自定义模块,我的管理员用户只能看到这个模块。 1-如何让普通用户访问我的自定义模块? 2-解决此问题的步骤是什么。 请举一个详细的例子。 最佳答案 创建一个Sec
我是 OpenERP 新手。我需要禁用一些菜单而不卸载添加菜单的模块。我尝试搜索要禁用其菜单的模块,然后删除所有搜索结果,结果却得到一个非常杂乱无章的菜单。请问我该如何实现?我只需要在菜单栏和主页上隐
有没有办法向在项目中分配任务的人发送电子邮件或在任务完成后向项目经理发送电子邮件? 我正在研究 OpenERP v6.1。 感谢您的回复 最佳答案 您可以覆盖按钮对象方法, obj_mail_
我正在使用 Odoo v.8。我想找出 Odoo 在哪里找到模块所在的信息,以加载它们。我知道文件 openerp-server.conf 中有一个变量 addons_path。我在其中找到变量的唯一
如何在 OpenERP 中创建看板 View ? developer book似乎没有关于新看板 View 的任何信息,而且我在 OpenERP forum 中没有看到任何有用的信息。 . 最佳答案
我在 openerp 中创建了一个新模块,现在我想为该模块提供安全性,因为我在模块文件夹中创建了一个名为“security”的文件夹,并在其中创建了一个 xml 文件和 ir.model.access
我知道 openerp 域中的运营商很少。我没有得到可用域的详细信息及其解释。特别是对于这些否定域。谁能告诉我详细 list ? 最佳答案 这给出了一个概述: 名单域名运营商:! (不是),| (或)
我想自定义报告文件名。 例如,当我下载一张发票时,我会有类似“Invoice.pdf”的文件名。我想要的是“invoice_number.pdf”之类的东西,但我不知道如何使用动态文件名? 最佳答案
我想将一些产品导入 odoo/openerp 用于销售点模块。但是我有一个名为“Chalet”的类别,在导入过程中找不到。在哪里可以找到产品类别的外部 ID? 这是我要导入的 .csv: Ex
我正在尝试从 OpenERP 的 web gui 和字段类型创建一个字段作为引用 第一,没有更好的引用文档 第二我想要的是,当有人选择该字段时,它应该提供另一个未发生的选择选项(尽管它提供了一些字段,
刚开始深入研究 OpenERP v7。以前在 v6.1 中,可以在每个表单的右侧轻松定义特定表单的默认值。例如,产品类型我需要将其设置为“Stockable Product”作为默认值而不是“Cons
我搜索并修改了一个简单的openerp自定义模块的源代码,我给出下面的代码 初始化 .py import sim 开瓶器 .py { 'name': 'Student Information Mana
OpenERP 和 Odoo 之间有什么区别。 我知道 Odoo(v8) 是 OpenERP(v7) 的最新版本 并解释一些关于 Odoo V9 的信息。这里的差异意味着 Odoo 中可用的所有附加功
如何在 OpenERP v7 中进行调试? 在以前的 OpenERP 版本中,它很容易调试。但是在最新版本中很难调试。 最佳答案 要在 eclipse 中调试 OpenERP+python 代码,请在
我正在尝试比较 OpenERP 和 Dynamics AX。有谁可以告诉我编程 OpenErp 和 Dynamics AX 时的区别?例如,我知道 Dynamics AX 中存在一个自定义层,并且所有
有人可以告诉我,根据记录的状态,我可以通过什么方式在具有特定颜色的 View 看板中显示项目。 我正在尝试这样的事情 但我查看了所有元素,而不仅仅是那些在“预定”中的元素。 谢谢 :) 最佳答案 如
我已经为用户创建了安全访问权限。创建后,我得到了如下图所示的 View 。 通过在 .csv 文件中授予权限,如 1、1、1、1,如下图所示。 我的问题是这个权限应该被带到前端。管理员可以向不同的用户
我想在修改记录时显示一个弹出窗口。更像是一个自定义验证对话框,用户将在最终保存之前在其中输入一些额外的数据。 我的问题是我无法显示带有“ir.actions.act_window”的弹出对话框。 我尝
如何在新选项卡上打开 url 链接而不是在单击按钮时在 OpenERP 中弹出? 最佳答案 在 V7 中,按住 Ctrl 键并单击大多数链接会按预期工作(即在新选项卡中打开链接)。 在 6.1 中,您
我是一名优秀的程序员,十分优秀!