命令行界面(CLI)

CLI 命令行界面 提供与 Odoo 相关的多项功能。你可以用它来 运行服务器、以 Python 控制台环境启动 Odoo、为 Odoo 模块创建脚手架、复制记录、填充数据库,或 统计代码行数。

重要

调用 CLI 的命令取决于 Odoo 的安装方式。在下面的示例中,我们假设你使用 odoo-bin 文件 从源码运行 Odoo。如果你通过 发行版软件包 或 Docker 安装了 Odoo,则必须相应调整命令。

  1. 进入下载 Odoo 社区版源码文件的目录根目录。

  2. 使用 ./odoo-bin 运行所有 CLI 命令

版本

-h, --help

它可以与任何可用命令组合使用,并显示当前命令的选项。

如果未使用任何命令,则其行为与 下面 的 help 命令相同。

--version

显示 Odoo 版本,例如 “Odoo Server 20.0”

小技巧

可以通过运行以下命令在 shell 中启用自动补全

COMMANDS=$(odoo-bin --help | sed -e "s/^    \([^ ]\+\).*$/ \1/gp;d" | xargs)
echo "complete -W '$COMMANDS' odoo-bin" >> ~/.bash_completion

help - 显示可用命令

此命令显示 Odoo 的所有可用命令。

它没有选项。

server - 运行服务器

此命令是默认命令:可以省略不写,系统仍会选用它。

-d <database>, --database <database>

安装或更新模块时使用的数据库。提供逗号分隔的列表将限制只能访问列表中提供的数据库。

有关高级数据库选项,请参阅 下文。

-i <modules>, --init <modules>

在运行服务器之前要安装的模块的逗号分隔列表(需要 -d)。

-u <modules>, --update <modules>

在运行服务器之前要更新的模块的逗号分隔列表。要更新所有模块,请使用 all。(需要 -d)。

--reinit <modules>

在启动服务器之前要重新初始化的模块的逗号分隔列表。(需要 -d)。

重新初始化类似于不执行任何升级脚本的简单升级。它以 init 模式而不是 update 模式加载数据,主要影响标记为 'noupdate' 的记录。所有直接或间接依赖所指定模块的模块也会被重新初始化。

此选项仅用于调试或开发目的。请勿用于生产数据库。

--addons-path <directories>

存储模块的目录的逗号分隔列表。系统会扫描这些目录以查找模块。

--upgrade-path <upgrade_path>

从中加载额外升级脚本的目录的逗号分隔列表。

--pre-upgrade-scripts <pre_upgrade_scripts>

升级脚本路径的逗号分隔列表。当请求升级任何模块时,这些脚本会在加载 base 模块之前运行。这在主版本升级后升级自定义模块期间执行某些操作时非常有用。

--load <modules>

要加载的服务器级模块列表。这些模块用于提供不一定与特定数据库绑定的功能。这与安装时总是绑定到特定数据库的模块(即大多数 Odoo 插件模块)不同。默认为 base,web。

-c <config>, --config <config>

备用 配置文件 的路径,也可以通过 ODOO_RC 环境变量设置。如果两者都未设置,则会查找以下位置:

Posix 系统:

  • /home/$USER/.config/odoo/odoo.conf

  • /etc/xdg/xdg-cinnamon/odoo (XDG 站点,可能有所不同)

  • /home/$USER/.odoorc

Windows 系统:

  • C:Users%USERNAME%AppDataLocalodooodooodoo.conf

  • C:ProgramDataodooodooodoo.conf

  • odoo-bin 可执行文件旁边的 odoo.conf 文件

  • C:Users%USERNAME%.odoorc

-D <data-dir-path>, --data-dir <data-dir-path>

存储 Odoo 数据的目录路径(例如 filestore、会话)。如果未指定,Odoo 会回退到预定义路径。在 Unix 系统上,该路径由 $XDG_DATA_HOME 环境变量定义,或为 ~/.local/share/Odoo 或 /var/lib/Odoo。

-s, --save

将服务器配置保存到当前配置文件(-c)。当配置文件不存在时,它使用与 -c 相同的查找顺序,并在第一个存在的文件夹处停止。

--with-demo

在新数据库中安装演示数据。

--without-demo

无论是在新数据库中,还是在使用演示数据的数据库中安装新模块时,都不安装演示数据,这是默认行为。

--skip-auto-install

当请求安装新模块时跳过自动安装模块。此选项对开发很有用,可用于检查已安装的模块是否间接依赖于自动安装的模块。

--pidfile=<pidfile>

用于存储服务器 pid 的文件路径

--stop-after-init

在服务器初始化后停止服务器。

--geoip-city-db <path>

GeoIP City 数据库文件的绝对路径。

--geoip-country-db <path>

GeoIP Country 数据库文件的绝对路径。

测试

--test-enable

在模块安装后运行测试

--test-file <file>

运行一个 Python 测试文件

--test-tags [-][tag][/module][:class][.method]

以逗号分隔的规格列表,用于筛选要执行的测试。设置后即启用单元测试。

示例:--test-tags :TestClass.test_func,/test_module,external

  • - 用于指定是包含还是排除与此规格匹配的测试。

  • 标签将匹配通过 tagged() 装饰器添加到类上的标签(所有 测试类 都带有 standard 和 at_install 标签,除非显式移除,请参阅装饰器文档)。

  • * 将匹配所有标签。

  • 在包含模式下如果省略标签,其值为 standard。

  • 在排除模式下如果省略标签,其值为 *。

  • 模块、类和方法的匹配对象分别是模块名、测试类名和测试方法名。

测试的筛选与执行会发生两次:每次模块安装/更新之后,以及模块加载结束时。在每个阶段,测试会按 --test-tags 规格进行筛选,并分别额外按动态规格 at_install 和 post_install 进行筛选。

--screenshots

指定当 HttpCase.browser_js 测试失败时写入截图的目录。默认值为 /tmp/odoo_tests/db_name/screenshots

--screencasts

启用屏幕录制并指定录制文件的写入目录。需要安装 ffmpeg 工具才能将帧编码为视频文件。否则将保留帧而不生成视频文件。

数据库

-r <user>, --db_user <user>

数据库用户名,用于连接 PostgreSQL。

-w <password>, --db_password <password>

数据库密码,在使用 password authentication 时。

--db_host <hostname>

数据库服务器的主机

  • 在 Windows 上为 localhost

  • 否则使用 UNIX 套接字

--db_port <port>

数据库监听的端口,默认为 5432

--db_replica_host <hostname>

副本数据库服务器的主机,未设置或为空时禁用

--db_replica_port <port>

副本数据库监听的端口,默认为 --db_port

--db-filter <filter>

为 Web 界面隐藏不匹配 <filter> 的数据库。该过滤器是 regular expression,并有以下附加规则:

  • %h 会被替换为请求所使用的完整主机名。

  • %d 会被替换为请求所使用的子域名,但 www 除外(因此域名 odoo.com 和 www.odoo.com 都会匹配数据库 odoo)。

    这些操作区分大小写。添加选项 (?i) 可匹配所有数据库(因此使用 (?i)%d 的域名 odoo.com 会匹配数据库 Odoo)。

自版本 11 起,还可以通过 –database 参数指定以逗号分隔的数据库列表,将访问限制到特定的数据库监听。

同时使用这两个参数时,db-filter 会取代以逗号分隔的数据库列表来决定可访问的数据库列表,而该逗号分隔列表则用于执行所请求的操作,例如升级模块。

$ odoo-bin --db-filter ^11.*$

将访问限制到名称以 11 开头的数据库

$ odoo-bin --database 11firstdatabase,11seconddatabase

仅允许访问两个数据库 11firstdatabase 和 11seconddatabase

$ odoo-bin --database 11firstdatabase,11seconddatabase -u base

仅允许访问两个数据库 11firstdatabase 和 11seconddatabase,并在其中一个数据库 11firstdatabase 上更新 base 模块。如果数据库 11seconddatabase 不存在,则会创建该数据库并安装基础模块

$ odoo-bin --db-filter ^11.*$ --database 11firstdatabase,11seconddatabase -u base

将访问限制到名称以 11 开头的数据库,并在其中一个数据库 11firstdatabase 上更新 base 模块。如果数据库 11seconddatabase 不存在,则会创建该数据库并安装基础模块

警告

此选项不影响定时任务工作进程;如果未指定 –database,定时任务工作进程将在所有可用数据库上运行

--db-template <template>

从数据库管理界面创建新数据库时,使用指定的 template database。默认为 template0。

--db-system <db>

指定用于总线与维护等共享系统操作的数据库。默认为 postgres。

--pg_path </path/to/postgresql/binaries>

数据库管理器用于转储和恢复数据库的 PostgreSQL 可执行文件路径。仅当这些可执行文件位于非标准目录时才需要指定此选项。

--no-database-list

禁止列出系统上可用的数据库

--db_sslmode

控制 Odoo 与 PostgreSQL 之间连接的 SSL 安全性。取值应为 ‘disable’、’allow’、’prefer’、’require’、’verify-ca’ 或 ‘verify-full’ 之一。默认值为 ‘prefer’

--unaccent

创建新数据库时尝试启用 unaccent 扩展

电子邮件

--email-from <address>

Odoo 需要发送邮件时用作 <FROM> 的电子邮件地址

--from-filter <address or domain>

定义 SMTP 配置将应用于哪个电子邮件地址。该字段可以是一个域名或完整的电子邮件地址,也可以留空。如果发件人的电子邮件地址与此筛选设置不匹配,则邮件将使用两个系统参数 mail.default.from 和 mail.catchall.domain 的组合进行封装。例如,”Admin” <admin@example.com> => “Admin” <notifications@mycompany.com>。

--smtp <server>

发送邮件时要连接的 SMTP 服务器地址

--smtp-port <port>
--smtp-ssl

如果设置,Odoo 应使用 SSL/STARTSSL SMTP 连接

--smtp-user <name>

连接 SMTP 服务器的用户名

--smtp-password <password>

连接 SMTP 服务器的密码

--smtp-ssl-certificate-filename <path/to/cert.pem>

用于身份验证的 SSL 证书。如果设置此项,则必须提供 smtp-ssl-private-key。

--smtp-ssl-private-key-filename <path/to/key.pem>

用于身份验证的 SSL 私钥。如果设置此项,则必须提供 smtp-ssl-certificate。

国际化

--load-language <languages>

指定要加载的翻译所对应的语言(以逗号分隔)

--i18n-overwrite

在更新模块或导入 CSV 或 PO 文件时覆盖现有的翻译术语。

高级选项

开发者功能

--dev <feature,feature,...,feature>

以逗号分隔的功能列表。仅用于开发目的,请勿在生产环境中使用。可用的功能包括:

  • all: xml、reload、qweb、access 的别名

  • xml: 直接从 xml 文件读取 QWeb 模板,而不是从数据库读取。一旦模板在数据库中被修改,在下次更新/初始化之前将不再从 xml 文件读取。特别注意,使用此选项时模板不会被翻译。

  • reload: 当 python 文件被更新时重启服务器(取决于所使用的文本编辑器,可能无法检测到)

  • qweb: 当节点包含 t-debug='debugger' 时在 QWeb 模板求值过程中中断

  • werkzeug: 发生异常时在前端页面显示完整的 traceback

  • replica: 模拟 --db_replica_host,但连接到与 --db_host 相同的数据库服务器,这样就可以测试只读功能,而无需设置副本数据库。

  • access: 当 AccessError 导致 403 - Forbidden HTTP 响应时,在旁边记录 traceback。

HTTP

--no-http

不启动 HTTP 或长轮询工作进程(仍可能启动 定时任务 工作进程)

警告

如果设置了 --test-enable,则此选项无效,因为测试需要可访问的 HTTP 服务器

--http-interface <interface>

HTTP 服务器监听的 TCP/IP 地址,默认为 0.0.0.0 (所有地址)

-p <port>
--http-port <port>

HTTP 服务器监听的端口,默认为 8069。

--gevent-port <port>

在多进程或 gevent 模式下用于 websocket 连接的 TCP 端口,默认为 8072。默认(线程)模式下不使用。

--proxy-mode

通过 Werkzeug’s proxy support 启用 X-Forwarded-* 头的使用。

如果请求中缺少 X-Forwarded-Host,则会忽略所有 X-Forwarded-* 头。

它始终从 X-Forwarded-For 链的最后一项获取真实 IP。如果链中还有其他必须忽略的可信代理,请使用诸如 nginx 的 set_real_ip_from 等指令相应配置 Web 服务器。

X-Forwarded-Proto 和 X-Forwarded-Host 用于更新请求的根 URL,而根 URL 又会在管理员身份验证成功后用于更新 web.base.url 系统参数。此系统参数用于生成当前数据库的所有链接;请参阅 数据库的 Web 基本 URL。

警告

在反向代理场景之外 不得 启用代理模式

--x-sendfile

将附件文件的服务委托给静态 Web 服务器,并在流式响应中同时设置 X-Sendfile (apache)和 X-Accel-* (nginx)HTTP 头。Web 服务器配置请参阅 提供静态文件和附件。

记录

默认情况下,Odoo 会显示所有 level 为 INFO、WARNING 和 ERROR 的日志。所有日志无论级别如何都输出到 stderr。有多种选项可用于将日志重定向到其他目标并自定义详细程度。

--logfile <file>

将日志输出发送到指定文件而不是 stderr。在 Unix 上,该文件 可以由外部日志轮转程序管理 并在被替换时自动重新打开

--log-config <file>

使用 dictConfig() 配置日志系统,该配置存储在 JSON 或 TOML 文件中。

默认情况下,如果使用此项,所有日志选项和内置配置都会被忽略;可以在 dictConfig 的根级将 keep_odoo_default 设为 true,以便之后仍正常处理日志选项。

--syslog

记录到系统事件日志:Unix 上的 syslog 和 Windows 上的事件日志。

两者均不可配置

20.0 版后已移除: 请改用 --log-config。

--log-db <dbname>

记录到指定数据库的 ir.logging 模型(ir_logging 表)。该数据库可以是 “current” PostgreSQL 中的数据库名称,也可以是用于日志聚合等用途的 a PostgreSQL URI。

--log-handler <handler-spec>

LOGGER:LEVEL,在所提供的 LEVEL 上启用 LOGGER,例如 odoo.models:DEBUG 将启用模型中 DEBUG 级别及以上的所有日志消息。

  • 冒号 : 是必需的

  • 可以省略日志记录器以配置根(默认)处理器

  • 如果省略级别,则日志记录器设为 INFO

可以重复使用此选项来配置多个日志记录器,例如

$ odoo-bin --log-handler :DEBUG --log-handler werkzeug:CRITICAL --log-handler odoo.fields:WARNING
--log-web

启用 HTTP 请求和响应的 DEBUG 日志,等效于 --log-handler=odoo.http:DEBUG

--log-sql

启用 SQL 查询的 DEBUG 日志,等效于 --log-handler=odoo.sql_db:DEBUG

--log-level <level>

用于更轻松地在特定日志记录器上设置预定义级别的快捷方式。”real” 级别(critical、error、warn、debug)会设置在 odoo 和 werkzeug 日志记录器上(debug 除外,它只设置在 odoo 上)。

Odoo 还提供了一些调试伪级别,它们适用于不同的日志记录器集合:

debug_sql

将 SQL 日志记录器设置为 debug

等效于 --log-sql

debug_rpc

将 odoo 和 HTTP 请求日志记录器设置为 debug

等效于 --log-level debug --log-request

debug_rpc_answer

将 odoo 以及 HTTP 请求和响应日志记录器设置为 debug

等效于 --log-level debug --log-request --log-response

注解

如果 --log-level 与 --log-handler 冲突,则使用后者

多进程

--workers <count>

如果 count 不为 0(默认值),则启用多进程,并设置指定数量的 HTTP 工作进程(处理 HTTP 和 RPC 请求的子进程)。

注解

多进程模式仅在类 Unix 系统上可用

有多项选项可用于限制和回收工作进程:

--limit-request <limit>

工作进程在被回收并重启之前处理的请求数量。

默认为 8196。

--limit-memory-soft <limit>

每个工作进程允许的最大虚拟内存(以字节为单位)。如果超出限制,该工作进程会在当前请求结束时被终止并回收。

默认为 2048MiB (2048*1024*1024B)。

--limit-memory-hard <limit>

虚拟内存的硬性限制(以字节为单位),任何超出限制的工作进程都会被立即终止,而不等待当前请求处理结束。

默认为 2560MiB (2560*1024*1024B)。

--limit-time-cpu <limit>

防止工作进程在每个请求中使用的 CPU 时间超过 <limit> 秒。如果超出限制,该工作进程会被终止。

默认为 60。

--limit-time-real <limit>

防止工作进程处理请求的时间超过 <limit> 秒。如果超出限制,该工作进程会被终止。

与 --limit-time-cpu 的区别在于这是 “wall time”(实际耗时)限制,例如包含 SQL 查询。

默认为 120。

--max-cron-threads <count>

专用于 定时任务 的工作进程数量。默认为 2。在多线程模式下这些工作进程是线程,在多进程模式下则是进程。

对于多进程模式,这些是在 HTTP 工作进程之外的额外进程。

--limit-time-worker-cron <limit>

对 定时任务 线程/工作进程在重启之前允许存活的最长时间的软性限制(以秒为单位)。

设为 0 表示禁用。

默认为 0。

配置文件

大多数命令行选项也可以通过配置文件指定。大多数情况下,它们使用相似的名称,去掉前缀 -,并将其他 - 替换为 _,例如 --db-template 变为 db_template。

有些转换不符合该模式:

  • --db-filter 变为 dbfilter

  • --no-http 对应 http_enable 布尔值

  • 日志预设(所有以 --log- 开头的选项,但 --log-handler 和 --log-db 除外)只是向 log_handler 添加内容,请直接在配置文件中使用它

  • --smtp 存储为 smtp_server

  • --database 存储为 db_name

默认配置文件为 $HOME/.odoorc,可通过 --config 覆盖。指定 --save 会将当前配置状态保存回该文件。与命令行对应的配置项需要在 [options] 节中指定。

以下是一个示例文件:

[options]
db_user=odoo
dbfilter=odoo

shell - 打开 Shell

Odoo 命令行还允许将 Odoo 作为 Python 控制台环境启动,从而可以直接与 orm 及其功能交互。由于运行 shell 会启动服务器,配置文件中的选项同样生效。

$ odoo-bin shell

示例

为所有联系人的名称添加感叹号:

In [1]: records = env["res.partner"].search([])

In [2]: records
Out[2]: res.partner(14, 26, 33, 21, 10)

In [3]: for partner in records:
   ...:     partner.name = "%s !" % partner.name
   ...:

In [4]: env.cr.commit()

重要

默认情况下,shell 以事务模式运行。这意味着退出 shell 时对数据库所做的任何更改都会回滚。要提交更改,请使用 env.cr.commit()。

--shell-file <init_script.py>

指定在 shell 启动后运行的 Python 脚本。覆盖环境变量 PYTHONSTARTUP。

--shell-interface (ipython|ptpython|bpython|python)

指定 shell 模式下首选使用的 REPL。启动此 shell 时 env 变量已初始化,以便访问 ORM 和其他 Odoo 模块。

更多内容

环境

db - 管理数据库

此命令允许通过命令行界面管理数据库。各项操作通过子命令指定。

对于所有子命令,均可使用以下用于配置环境的选项:

db init - 初始化数据库

此命令会创建新数据库并安装 base 模块。你可以指定主公司的语言和国家/地区。

$ odoo-bin db init <database>
database

要初始化的数据库名称。

--with-demo

在初始化的数据库中安装演示数据。

--force

在初始化新数据库之前,如果该数据库已存在,则将其删除。

--country <country_iso_code>

要在主公司上设置的国家/地区代码

--language <language_code>

实例的默认语言,默认为 en_US

--username <password>

新数据库的用户名,默认为 admin

--password <password>

新数据库的密码,默认为 admin

db dump - 保存数据库转储

创建转储文件。

$ odoo-bin db dump <database> <dump_path>
database

要转储的数据库名称。

dump_path

(可选)数据库将转储到指定路径。默认转储到 stdout。

--format <zip | dump>

如果提供,则使用指定的格式转储数据库。支持的格式有 zip (默认)和 dump (pg_dump 格式)。

--no-filestore

如果提供,则转储 zip 数据库时不包含文件存储

db load - 加载数据库转储

将转储文件加载到 Odoo 数据库中,转储文件可以是一个 URL。

$ odoo-bin db load <database> <dump_file>
database

(可选)要从此转储创建的数据库名称。如果未提供,则使用不带扩展名的转储文件名。

dump_file

要加载的 .zip 或 pg_dump 文件。

-f,--force

在加载新数据库之前,如果该数据库已存在,则将其删除。

-n,--neutralize

恢复数据库后对其进行中和处理。

db duplicate - 复制数据库

复制数据库,包括文件存储。

$ odoo-bin db duplicate <source> <target>
source

源数据库名称。

target

目标数据库名称。

-n,--neutralize

恢复数据库后对其进行中和处理。

-f,--force

在初始化新数据库之前,如果目标数据库已存在,则将其删除。

db rename - 重命名数据库

将数据库从旧名称重命名为新名称。

$ odoo-bin db rename <source> <target>
source

数据库的当前名称。

target

数据库的新名称。

-f,--force

在重命名源数据库之前,如果目标数据库已存在,则将其删除。

db drop - 删除数据库

$ odoo-bin db drop <database>
database

要删除的数据库名称。

i18n - 国际化

此命令包含多个子命令,可用于在 Odoo 实例上导入或导出国际化文件并设置语言。

对于所有子命令,均可使用以下用于配置环境的选项:

注解

语言代码必须遵循 XPG (POSIX) 区域设置格式。

要列出可用的代码,可以查询数据库来搜索:

$ psql -d <dbname> -c "SELECT iso_code FROM res_lang ORDER BY iso_code"

示例

$ odoo-bin i18n loadlang -l en         # English (U.S.)
$ odoo-bin i18n loadlang -l es es_AR   # Spanish (Spain, Argentina)
$ odoo-bin i18n loadlang -l sr@latin   # Serbian (Latin)

i18n import - 导入 i18n 文件

此命令导入提供的 .po 或 .csv 格式的翻译文件。默认情况下只会添加新条目,但你可以选择覆盖现有术语。所有文件都必须对应指定的语言。

$ odoo-bin i18n import <files> --overwrite --language <language_code>
files
要导入的文件列表。
允许的扩展名:.po、.csv。
-l,--language

(必填)文件中翻译的语言代码。

-w,--overwrite

导入时覆盖现有翻译。

i18n export - 导出 i18n 文件

此命令将 Odoo 数据库中模块的现有翻译术语导出为多种格式:.po、.pot、.tgz、.csv。对于 .po 和 .pot 文件,它们将创建在其所属模块的 i18n/ 文件夹下。如果指定输出参数,则只能选择一种语言,并且所有输出都将使用该语言。.tgz 输出格式会将所有输出归档到单个文件中。

$ odoo-bin i18n export <modules> --languages <language_codes>
modules

要从中导出国际化文件的模块列表。

-l,--languages <languages>

要导出的语言代码列表,pot 表示模板(默认)。

-o,--output
包含所有提供的模块翻译的单一输出文件路径。
允许的扩展名:.po、.pot、.tgz、.csv
如果提供 -,内容将作为 .po 文件写入 stdout。

此选项启用时只允许一种语言。

i18n loadlang - 加载语言

此命令将一种可用语言加载到 Odoo 数据库中并激活它。

$ odoo-bin i18n loadlang <languages>
languages

要安装的语言的语言代码。

module - 管理模块

此命令包含多个子命令,可用于在 Odoo 实例上安装、卸载和升级模块。还有一个命令可以强制将演示数据安装到数据库中。

对于所有子命令,可使用以下选项:

module install - 安装模块

此命令会立即安装所有选定的模块。

在安装模块之前,需要在 PostgreSQL 实例上创建并初始化 Odoo 数据库,例如使用 db init - 初始化数据库 命令。

$ odoo-bin module install <modules>
modules

要安装的模块列表。

module uninstall - 卸载模块

此命令会立即卸载所有选定的模块。

$ odoo-bin module uninstall <modules>
modules

要卸载的模块列表。

module upgrade - 升级模块

此命令会立即升级所有选定的模块。

$ odoo-bin module upgrade <modules>
modules

要升级的模块列表。使用 base 或 all 表示所有已安装模块。

--outdated

仅更新磁盘上具有较新版本的模块。如果 all 用作 modules 参数,则适用于所有已安装模块。

module forcedemo - 强制安装演示数据

此命令强制安装 演示数据

警告

安装后无法撤销,因此你可能需要先使用 db dump 命令保存数据库备份

此命令没有其他选项。

neutralize - 中和数据库

Odoo 命令行也可以中和数据库。该命令必须配合数据库选项运行。

$ odoo-bin --addons-path <PATH,...> neutralize -d <database>
-d <database>, --database <database>

指定你想要中和的数据库名称。

--stdout

输出中和 SQL 而不是执行它

更多内容

存档数据库

scaffold - 生成模块脚手架

脚手架是指自动创建骨架结构以简化引导过程(在 Odoo 中即创建新模块)。虽然不是必需的,但它可以避免设置基本结构和查询所有初始要求的繁琐工作。

可通过 odoo-bin scaffold 子命令使用脚手架。

$ odoo-bin scaffold my_module /addons/
name (required)

要创建的模块名称,可能会以多种方式改写以生成程序化名称(例如模块目录名、模型名等)

destination (default=current directory)

在其中创建新模块的目录,默认为当前目录

-t <template>

模板目录,文件会先经过 jinja2 处理,然后复制到 destination 目录

这将在目录 /addons/ 中创建模块 my_module。

duplicate - 复制记录

Odoo Duplicate 允许复制给定数据库中的现有数据。当需要大表时,可用于测试和基准测试。复制过程会为某些字段引入变化,以遵守 UNIQUE 约束等。它还会遵循 x2Many 关系。

更多内容

如需使用蓝图从头生成合成数据,请参阅 populate - 填充数据库。

$ odoo-bin duplicate -d <database> --models res.partner,account.move --factors 1000
-d <database>

要在其中复制记录的数据库名称

--models <models>

要复制的模型列表。出现两次的模型只会复制一次。

--factors <factors>

复制系数列表。系数 3 表示模型的记录将被复制 3 次,达到原始数量的 4 倍。如果某个模型缺少系数,则使用列表中的最后一个系数。

--sep <separator>

用于生成记录名称的分隔符

populate - 填充数据库

根据存储在 populate.blueprint 中的蓝图生成合成数据。

注解

运行此命令之前,必须在目标数据库上安装 populate 模块。

更多内容

本节仅记录命令行接口。有关如何定义和构建蓝图、编写自定义生成器以及使用高级 populate 功能的信息,请参阅 Populate。

$ odoo-bin populate -d <database> -b my_module.my_blueprint
-d <database>, --database <database>

目标数据库。

-b <blueprint>, --blueprint <blueprint>

蓝图名称或完整 xmlid。除非使用了 --resume,否则此项为必填。

--seed <seed>

用于确定性生成的种子。

--scale <factor>

将蓝图中所有记录数量乘以该系数。默认值:1。

-j <workers>, --jobs <workers>

并行工作进程数。使用 auto 可占用所有可用的 CPU 线程。默认值:1。

--resume [session_id]

恢复最近一次未完成的会话,或恢复指定的会话。

--profile

为本次运行中的每个可执行 populate 作业保存性能分析器追踪记录。

cloc - 统计代码行数

Odoo Cloc 是一款用于统计以 Python、Javascript、CSS、SCSS 或 XML 编写的相关代码行数的工具。它可作为对额外模块的维护服务定价时的粗略指标。

$ odoo-bin cloc -c config.conf -d my_database
-d <database>, --database <database>
处理所提供数据库中安装的所有额外模块的代码,以及在所提供数据库中手动创建的所有服务器动作和计算字段的代码。
需要使用 --addons-path 选项来指定模块文件夹的路径。
如果与 --path 组合使用,统计结果将是两个选项结果之和(可能存在重叠)。这两个选项中至少需要一个,用于指定要处理的代码。
$ odoo-bin cloc --addons-path=addons -d my_database
-p <path>, --path <path>
处理所提供路径中的文件。
如果与 --database 组合使用,统计结果将是两个选项结果之和(可能存在重叠)。这两个选项中至少需要一个,用于指定要处理的代码。
$ odoo-bin cloc -p addons/account

可以通过重复该选项来提供多个路径。

$ odoo-bin cloc -p addons/account -p addons/sale
--addons-path <directories>
以逗号分隔的目录列表,模块存储在这些目录中。系统会在这些目录中扫描模块。
如果使用了 --database 选项,则此项为必填。
-c <directories>

指定要使用的配置文件,以替代 --addons-path 选项。

-v, --verbose

显示每个文件所统计行数的详细信息。

已处理的文件

使用 --database 选项时

Odoo Cloc 会统计给定数据库中已安装的额外模块的每个文件的行数。此外,它还会统计直接在数据库中创建或导入的服务器动作和自定义计算字段的 Python 行数。最后,它还会统计 Javascript、CSS 和 SCSS 文件的代码行数,以及来自已导入模块的 QWeb 视图的行数。

默认情况下,某些文件不计入统计:

  • 清单文件(__manifest__.py 或 __openerp__.py)

  • 文件夹 static/lib 的内容

  • 文件夹 tests 和 static/tests 中定义的测试

  • 文件夹 migrations 和 upgrades 中定义的迁移脚本

  • 清单文件的 demo 或 demo_xml 部分中声明的 XML 文件

对于特殊情况,可以为每个模块定义一个应被 Odoo Cloc 忽略的文件列表。这通过清单文件的 cloc_exclude 条目指定:

"cloc_exclude": [
    "lib/common.py", # exclude a single file
    "data/*.xml",    # exclude all XML files in a specific folder
    "example/**/*",  # exclude all files in a folder hierarchy recursively
    "**/*.scss",     # exclude all scss file from the module
]
可以使用模式 **/* 忽略整个模块。这对于将某个模块排除在维护服务费用之外很有用。
有关模式语法的更多信息,请参阅 glob。

使用 --path 选项时

如果在给定文件夹中存在清单文件,此方法的运作方式与 –database 选项 相同。否则,它会统计所有文件。

识别额外模块

为了区分标准模块和额外模块,Odoo Cloc 使用以下启发式规则:位于与 base、web 或 web_enterprise 标准模块相同的父目录中的模块(按真实文件系统路径,即跟随符号链接后)被视为标准模块。其他模块则被视为额外模块。

错误处理

某些文件无法被 Odoo Cloc 统计。这些文件会在输出末尾报告。

超出最大文件大小

Odoo Cloc 会拒绝任何大于 25MB 的文件。通常,源文件小于 1 MB。如果某个文件被拒绝,它可能是:

  • 包含大量数据的生成的 XML 文件。应在清单文件中将其排除。

  • 应放置在 static/lib 文件夹中的 JavaScript 库。

语法错误

Odoo Cloc 无法统计存在语法问题的 Python 文件的代码行数。如果某个额外模块包含此类文件,应修复它们以便该模块能够加载。如果模块在存在这些文件的情况下仍能正常工作,说明它们很可能未被加载,因此应从模块中删除,或至少通过 cloc_exclude 在清单文件中排除。

obfuscate - 混淆数据库

此命令提供了一种快速简便的方式来混淆 Odoo 实例中的部分数据,主要用于教学目的,或为支持团队制作快速视频,帮助技术人员避免泄露敏感信息。

警告

必须谨慎使用此命令,因为将数据传输给第三方之前用它来完全匿名化数据 并非 一种安全的方法。图像、PDF 附件、金额以及许多其他信息可能不会被混淆,从而导致敏感信息泄露。在共享数据之前需要彻底审查,以确保不会暴露任何敏感信息。

混淆是对称的,因此可以使用相同的密码来解除混淆。

此命令同样支持 server 命令的所有可用配置。

$ odoo-bin obfuscate --pwd=<password>
--pwd <password>

(必填)用于对称混淆内容的密码。

--unobfuscate

如果希望解除混淆而不是进行混淆。

--fields <fields>

以逗号分隔的 table.column 条目列表,用于指定要混淆或解除混淆的项。

--file <file>

包含要混淆或解除混淆的 table.column 条目列表的文件。

--exclude

以逗号分隔的 table.column 条目列表,用于指定不进行混淆或解除混淆的项。

--allfields

仅在选中 --unobfuscate 时使用。

尝试对所有字段解除混淆。这比手动指定字段要慢。

--vacuum

仅在选中 --unobfuscate 时使用。

解除混淆后,完全清空已混淆的表并回收未使用的磁盘空间。

--pertablecommit

混淆后,每张表提交一次。

这样可以避免大型事务超时,或是在出错后遭遇回滚。

-y,--yes

不请求手动确认。

仅在您确信在未经审查的情况下将数据库共享给第三方不会泄露敏感信息时才使用。

deploy - 远程部署模块

此命令将模块上传到远程 Odoo 服务器并安装。它比手动连接到远程服务器更简单,并且不需要对托管 Odoo 实例的机器拥有完全访问权限,只需 Odoo 管理员凭据。

$ odoo-bin deploy <path> <url> --db <dbname> --login <login> --password <password>

注解

前提条件:

  • 服务器必须已安装 base_import_module 模块。

  • 使用 --login 选项指定的用户必须具有管理员权限。

path

要部署的模块的路径

url

(可选)模块要部署到的服务器的 URL(默认 http://localhost:8069)

db <dbname>

数据库名称(如果服务器未使用 --db-filter 选项)

--login <username>

具有管理员权限的用户的名称(默认 admin)

--password <password>

具有管理员权限的用户的密码(默认 admin)

--verify-ssl

验证服务器的 SSL 证书,以确保目标实例是合法的。

--force

如果模块已安装,则重新初始化该模块。它将更新 noupdate="1" 的记录。

upgrade_code - 重写源代码

此命令使用 odoo/upgrade_code 文件夹中的脚本来重写整个源代码。它用于在处理大型代码迁移和向前移植时承担繁重的工作。

注解

所有脚本都会尽最大努力迁移源代码,但它们并非万灵药。

它接受 --addons-path 选项。

$ odoo-bin upgrade_code --from 18.0 --to 19.0 --dry-run
--script <path>

运行单个脚本

--from <version>

运行从此版本(含)开始的所有脚本

--to <version>

与 --from 一起使用。运行直到此版本(含)的所有脚本。默认为 odoo.release.version。

--glob <glob>

筛选要重写的文件,默认为所有文件(**/*)

--dry-run

列出将被重写的文件,但不应用更改

代码升级脚本

脚本必须命名为 {version}-{name}.py,并且必须提供一个 upgrade 函数,该函数接受单个 file_manager 参数且没有返回值。

file_manager 参数是一个 files 序列,其中的文件具有 3 个属性和一些辅助方法:

  • path:文件在文件系统中的路径(pathlib.Path)。

  • addon:文件所属的插件模块。

  • content:文件可重写的内容(惰性求值)。

  • print_progress(current, total):输出当前进度。

示例

def upgrade(file_manager):
    files = (file for file in file_manager if file.path.suffix == '.py')
    for fileno, file in enumerate(files, start=1):
        file.content = file.content.replace(..., ...)
        file_manager.print_progress(fileno, len(files))