第十九章 OdooShell
OdooShell是Odoo提供的包含运行环境的Shell环境,可以方便我们进行一些批量操作。
OdooShell的启动
OdooShell的启动非常简单,使用下面的命令即可开启一个OdooShell环境:
odoo shell -c /etc/odoo.conf
shell后面可以接下面的参数:
- -p:端口
- -c:指定的配置文件
- -d: 指定数据库
如果我们要在已经运行odoo的服务器上运行odooshell,那么我们需要使用与odoo服务不同的端口才可以成功接入
OdooShell的初始化
成功接入到OdooShell以后,我们可以看到类似下面的界面:
Warn: Can't find .pfb for face 'Times-Roman'
env: <odoo.api.Environment object at 0x7f07e4fe3d90>
odoo: <module 'odoo' from '/usr/lib/python3/dist-packages/odoo/__init__.py'>
openerp: <module 'odoo' from '/usr/lib/python3/dist-packages/odoo/__init__.py'>
self: res.users(1,)
Python 3.8.2 (default, Jul 16 2020, 14:00:26)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
(Console)
OdooShell默认提供了几个可以直接使用的变量:
- env: 环境变量
- odoo: odoo模块
- openerp: 等同于odoo变量
- self: 当前用户
我们在odooshell操作完数据之后,需要使用env.cr.commit()方法将其提交到数据库应用才能生效,否则这些改动只是在内存。
应用场景一: 批量处理数据
OdooShell的一个重要的使用场景就是批量处理数据,很多时候我们需要对数据进行初始化操作或者批处理,那么这个时候我们就可以使用odooshell来完成这个工作。
例如,我们希望批量处理某个数据库中所有的产品数据,希望将它们的发票订购规则改为按订单开票,那么我们就可以使用下面的脚本:
product_templates = env['product.template'].search([])
product_templates.invoice_policy = 'order';
应用场景二: 测试数据
我们在odooshell中操作数据,在我们正式提交数据之前,是不会提交到数据库的,因此这相当于一个理想的测试环境,我们可以随意测试数据,只要我们不提交就能完美地进行一个生产环境的测试。
Shell存在的问题
Shell在使用过程中需要注意的问题是,它加载的数据并非实时最新的数据, 而是按照快照隔离级别(Read Commited)进行读取的. 也就是说当前shell环境中读取的可能并非实时数据, 如果想要获取最新数据,需要执行commit命令以后再执行.