Pular para o conteúdo
Odoo Menu
  • Entrar
  • Experimente grátis
  • Aplicativos
    Finanças
    • Financeiro
    • Faturamento
    • Despesas
    • Planilhas (BI)
    • Documentos
    • Assinar Documentos
    Vendas
    • CRM
    • Vendas
    • PDV Loja
    • PDV Restaurantes
    • Assinaturas
    • Locação
    Websites
    • Criador de Sites
    • e-Commerce
    • Blog
    • Fórum
    • Chat ao Vivo
    • e-Learning
    Cadeia de mantimentos
    • Inventário
    • Fabricação
    • PLM - Ciclo de Vida do Produto
    • Compras
    • Manutenção
    • Qualidade
    Recursos Humanos
    • Funcionários
    • Recrutamento
    • Folgas
    • Avaliações
    • Indicações
    • Frota
    Marketing
    • Redes Sociais
    • Marketing por E-mail
    • Marketing por SMS
    • Eventos
    • Automação de Marketing
    • Pesquisas
    Serviços
    • Projeto
    • Planilhas de Horas
    • Serviço de Campo
    • Central de Ajuda
    • Planejamento
    • Compromissos
    Produtividade
    • Mensagens
    • Aprovações
    • Internet das Coisas
    • VoIP
    • Conhecimento
    • WhatsApp
    Aplicativos de terceiros Odoo Studio Plataforma Odoo Cloud
  • Setores
    Varejo
    • Loja de livros
    • Loja de roupas
    • Loja de móveis
    • Mercearia
    • Loja de ferramentas
    • Loja de brinquedos
    Comida e hospitalidade
    • Bar e Pub
    • Restaurante
    • Fast Food
    • Hospedagem
    • Distribuidor de bebidas
    • Hotel
    Imóveis
    • Imobiliária
    • Escritório de arquitetura
    • Construção
    • Administração de propriedades
    • Jardinagem
    • Associação de proprietários de imóveis
    Consultoria
    • Escritório de Contabilidade
    • Parceiro Odoo
    • Agência de marketing
    • Escritório de advocacia
    • Aquisição de talentos
    • Auditoria e Certificação
    Fabricação
    • Têxtil
    • Metal
    • Móveis
    • Alimentação
    • Cervejaria
    • Presentes corporativos
    Saúde e Boa forma
    • Clube esportivo
    • Loja de óculos
    • Academia
    • Profissionais de bem-estar
    • Farmácia
    • Salão de cabeleireiro
    Comércio
    • Handyman
    • Hardware e Suporte de TI
    • Sistemas de energia solar
    • Sapataria
    • Serviços de limpeza
    • Serviços de climatização
    Outros
    • Organização sem fins lucrativos
    • Agência Ambiental
    • Aluguel de outdoors
    • Fotografia
    • Aluguel de bicicletas
    • Revendedor de software
    Navegar por todos os setores
  • Comunidade
    Aprenda
    • Tutoriais
    • Documentação
    • Certificações
    • Treinamento
    • Blog
    • Podcast
    Empodere a Educação
    • Programa de educação
    • Scale Up! Jogo de Negócios
    • Visite a Odoo
    Obtenha o Software
    • Baixar
    • Comparar edições
    • Releases
    Colaborar
    • Github
    • Fórum
    • Eventos
    • Traduções
    • Torne-se um parceiro
    • Serviços para parceiros
    • Cadastre seu escritório contábil
    Obtenha os serviços
    • Encontre um parceiro
    • Encontre um Contador
    • Conheça um consultor
    • Serviços de Implementação
    • Referências de Clientes
    • Suporte
    • Upgrades
    Github YouTube Twitter Linkedin Instagram Facebook Spotify
    +1 (650) 691-3277
    Faça uma demonstração
  • Preços
  • Ajuda

Odoo is the world's easiest all-in-one management software.
It includes hundreds of business apps:

  • CRM
  • e-Commerce
  • Financeiro
  • Inventário
  • PoS
  • Projeto
  • MRP
All apps
É necessário estar registrado para interagir com a comunidade.
Todas as publicações Pessoas Emblemas
Marcadores (Ver tudo)
odoo accounting v14 pos v15
Sobre este fórum
É necessário estar registrado para interagir com a comunidade.
Todas as publicações Pessoas Emblemas
Marcadores (Ver tudo)
odoo accounting v14 pos v15
Sobre este fórum
Ajuda

How can i execute a SQL statement on module update and installation?

Inscrever

Seja notificado quando houver atividade nesta publicação

Esta pergunta foi sinalizada
developmentinstallationmoduleupdatesql
7 Respostas
68401 Visualizações
Avatar
herbert6453

How can i execute a SQL statement after module installation and a different sql statement after every modul update?

12
Avatar
Cancelar
Avatar
Daniel Reis
Melhor resposta

You can execute Model's method upon module's install or upgrade. Here's an example:

First, add the method that will do the initialization actions. For example:

class crm_routing_users(osv.osv):
"""For each Department and Role, which user is the responsible"""
_name = "crm.routing.users"

def _migrate_from_project_issue_profiling(self, cr, uid, ids=None, context=None):
"""Migrate from project.issue.profiling. since this module can completely replace it."""
if ids is not None:
raise NotImplementedError("Ids is just there by convention! Please don't use it.")
cr.execute("select exists(select * from information_schema.tables " "where table_name=project_issue_profiling)")
if cr.fetchone()[0]:
cr.execute(""" INSERT INTO crm_routing_users ( create_uid, create_date, write_date, write_uid, notes, user_id, section_id, department_id) SELECT create_uid, create_date, write_date, write_uid, notes, user_id, section_id, department_id FROM project_issue_profiling""")
_logger.info("Successful data copy from project.issue.profiling to crm.routing.users")
return True

Next, declare the call in an XML data file:

<openerp>
<data>
<!-- Migration for "project_service_profiling". Can be skipped if that module is not in use. -->
<function model="crm.routing.users" name="_migrate_from_project_issue_profiling"/>
</data>
</openerp>

EDIT:

Finally, add the XML data file to tour _openerp_.py manifest, in the data (v7) section. If you want it to run only on first install, add noupdate="1" to the data tag.

17
Avatar
Cancelar
Mohammad Alhashash

Are you sure there could be an init section in module manifest? Please check my comment on GEM's answer below. I think there is not init section and there is no difference between xml declaration using init_xml and update_xml attributes. At least in v7.0. Using noupdate="1" on data tag will run function tags only at module install.

Avatar
Cyril Gaspard (GEM)
Melhor resposta

Hi,

for the answer just create a file.sql with your requests inside, exemple :

DELETE FROM ir_ui_view_sc WHERE user_id = 1 and name = 'Clients';

add in your module_name/__openerp__.py :

in section

'update_xml': ["file.sql",],

for v7 :

'data': ["file.sql",],

use insert , update ... Bye

5
Avatar
Cancelar
Mohammad Alhashash

Regarding .xml and .sql files, there is no difference between module attributes init_xml, update_xml and data. The file will always be updated/executed on any module installation or update. Check the load_module_graph() function in openerp/modules/loading.py

Avatar
Mohammad Alhashash
Melhor resposta

You can create a method init(self, cr) in your model and it will be called upon module installation or upgrade.

You can check for update or install mode by checking the the existence of data or structures that should have been created in initialization or you can just use common sql or replace mechanism to use the same sql for both states.

Most reports use this method to create required views. Check this example from addons/account/report/account_report:

class report_account_receivable(osv.osv):
    _name = "report.account.receivable"
    _description = "Receivable accounts"
    _auto = False
    _columns = {
        'name': fields.char('Week of Year', size=7, readonly=True),
        'type': fields.selection(_code_get, 'Account Type', required=True),
        'balance':fields.float('Balance', readonly=True),
        'debit':fields.float('Debit', readonly=True),
        'credit':fields.float('Credit', readonly=True),
    }
    _order = 'name desc'

    def init(self, cr):
        tools.drop_view_if_exists(cr, 'report_account_receivable')
        cr.execute("""
            create or replace view report_account_receivable as (
                select
                    min(l.id) as id,
                    to_char(date,'YYYY:IW') as name,
                    sum(l.debit-l.credit) as balance,
                    sum(l.debit) as debit,
                    sum(l.credit) as credit,
                    a.type
                from
                    account_move_line l
                left join
                    account_account a on (l.account_id=a.id)
                where
                    l.state <> 'draft'
                group by
                    to_char(date,'YYYY:IW'), a.type
            )""")
3
Avatar
Cancelar
david

I have just to create report by using sql query (the same with above). But I have the problem: If I execute the query by postgreSQL maestro, there are 600 records. By postgreSQL Maestro, I open the view there are also 600 records. But the tree view in Openerp V7 there are only 19 records. Anyone help me?

Avatar
Yurdik Cervantes Mendoza
Melhor resposta

As long as we write less SQL sentences, the ORM can make more optimizations for us in the future and the maintenance will be easier.

There are cases where you have made strong changes to your models already used in production and the ORM can't make the automatic inference of the sql statements needed to give the database a logical state corresponding to your new code (ex: fix your table structure, move data between columns, calculate quickly default values for new not null columns using sql expressions, etc..).If your case is one of those data maintenance problems, you can use the migration scripts as specified in the MigrationManager descriptions: http://bit.ly/1UqiO8h.This mechanism is used extensively inside openupgrade: http://bit.ly/1QDc40R  You can find a lot of samples there.

In your case, just create a migration folder with a -pre or -post update script:

            <moduledir>
`-- migrations
|-- 8.0
| |-- pre-migration.py

In the  pre-migration.py script you can check the version and put both queries. The first two digits passed to the script is always the odoo version the others come from your module version ( __openerp__.py of your module)

You can install the module specifying one version 1.1 and then change the module version to 1.2, 1.3, etc... in

def migrate(cr, version):
if version == '8.0.1.1':
  cr.execute("""UPDATE ... FROM account_analytic_journal WHERE .... """)
else
  cr.execute(anothersql)

1
Avatar
Cancelar
Está gostando da discussão? Não fique apenas lendo, participe!

Crie uma conta hoje mesmo para aproveitar os recursos exclusivos e interagir com nossa incrível comunidade!

Inscreva-se
Publicações relacionadas Respostas Visualizações Atividade
Merge Two Or More Modules Into One (V11+)
development modules module sql v11.0
Avatar
0
fev. 21
4148
How implement a user query dialog "use init data yes or no" during module installation and update?
installation module data update init
Avatar
0
mar. 15
5009
how can I resolve dependency for Module called unidecode? Resolvido
installation module
Avatar
Avatar
Avatar
Avatar
Avatar
6
set. 24
53858
How to run a python function right after installing a module?
installation module
Avatar
2
jun. 20
21225
Should I update modules individually after git update? Resolvido
module update
Avatar
Avatar
1
mar. 18
5601
Comunidade
  • Tutoriais
  • Documentação
  • Fórum
Open Source
  • Baixar
  • Github
  • Runbot
  • Traduções
Serviços
  • Odoo.sh Hosting
  • Suporte
  • Upgrade
  • Desenvolvimentos personalizados
  • Educação
  • Encontre um Contador
  • Encontre um parceiro
  • Torne-se um parceiro
Sobre nós
  • Nossa empresa
  • Ativos da marca
  • Contato
  • Empregos
  • Eventos
  • Podcast
  • Blog
  • Clientes
  • Legal • Privacidade
  • Segurança
الْعَرَبيّة Català 简体中文 繁體中文 (台灣) Čeština Dansk Nederlands English Suomi Français Deutsch हिंदी Bahasa Indonesia Italiano 日本語 한국어 (KR) Lietuvių kalba Język polski Português (BR) română русский язык Slovenský jazyk slovenščina Español (América Latina) Español ภาษาไทย Türkçe українська Tiếng Việt

Odoo é um conjunto de aplicativos de negócios em código aberto que cobre todas as necessidades de sua empresa: CRM, comércio eletrônico, contabilidade, estoque, ponto de venda, gerenciamento de projetos, etc.

A proposta de valor exclusiva Odoo é ser, ao mesmo tempo, muito fácil de usar e totalmente integrado.

Site feito com

Odoo Experience on YouTube

1. Use the live chat to ask your questions.
2. The operator answers within a few minutes.

Live support on Youtube
Watch now