Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何更新不可更新的视图?_Python 3.x_Postgresql_Psycopg2_Odoo 11 - Fatal编程技术网

Python 3.x 如何更新不可更新的视图?

Python 3.x 如何更新不可更新的视图?,python-3.x,postgresql,psycopg2,odoo-11,Python 3.x,Postgresql,Psycopg2,Odoo 11,我正在处理OdooVersion11。我创建了一个名为test的视图。我升级了模块。稍后我需要进行一些更改,包括更改一些值和删除一些值。每当我尝试升级模块时,都会出现错误 psycopg2.OperationalError:无法从视图“测试”中删除 详细信息:包含GROUP BY的视图不可自动更新。 提示:要启用从视图中删除,请提供INSTEAD OF DELETE触发器或无条件的ON DELETE DO INSTEAD规则 如何提供规则?我的代码如下 @api.model_cr def ini

我正在处理OdooVersion11。我创建了一个名为test的视图。我升级了模块。稍后我需要进行一些更改,包括更改一些值和删除一些值。每当我尝试升级模块时,都会出现错误

psycopg2.OperationalError:无法从视图“测试”中删除 详细信息:包含GROUP BY的视图不可自动更新。 提示:要启用从视图中删除,请提供INSTEAD OF DELETE触发器或无条件的ON DELETE DO INSTEAD规则

如何提供规则?我的代码如下

@api.model_cr
def init(self):
    cr = self.env.cr   
    tools.drop_view_if_exists(cr, 'o_test')
    cr.execute("""

                CREATE or replace view o_test as 
                (
                    SELECT 
                        mve.id as id,
                        acc.code as account_code,
                        SUM (mve.debit-mve.credit) AS balance,
                        mve.account_id as account_id
                    FROM account_move_line mve
                    LEFT JOIN account_account acc ON mve.account_id = acc.id 
                    GROUP BY mve.id,mve.account_id,acc.code
                )
            """)
我想将代码更改为如下所示:

@api.model_cr
def init(self):
    cr = self.env.cr   
    tools.drop_view_if_exists(cr, 'o_test')
    cr.execute("""

                CREATE or replace view o_test as 
                (
                    SELECT 
                        mve.account_id as id,
                        acc.code as account_code,
                        SUM (mve.debit-mve.credit) AS balance,
                        mve.account_id as account_id
                    FROM account_move_line mve
                    LEFT JOIN account_account acc ON mve.account_id = acc.id 
                    GROUP BY mve.account_id,acc.code
                )
            """)

可以使用规则在Postgres中创建可编辑视图,GROUPBY子句应该不会有问题。对于更新查询,您可以编写如下规则。这里我只更新了一个专栏

CREATE OR REPLACE RULE update_o_test AS
    ON UPDATE TO o_test
    DO INSTEAD
 UPDATE account_account SET code = new.code
  WHERE account_account.id = old.id;
同样,您可以为插入和删除操作创建规则。在create view语句结束后添加规则应该有效。 希望这有助于