Odoo 9 将 `res.partner` 记录的 `image` 字段物理存储在数据库中的什么位置?
Where does Odoo 9 physically store the `image` field of `res.partner` records in the database?
我在 Odoo 9 PostgreSQL 数据库的 res_partner
table 中找不到 image
列? Odoo 9 在哪里存储这个图像字段?
从 Odoo 9 开始,许多 binary
字段已被修改为存储在 ir.attachment
模型中 (ir_attachment
table)。这样做是为了从文件系统存储(和重复数据删除属性)中获益并避免数据库膨胀。
这是在带有 attachment=True
参数的二进制字段上启用的,就像 res.partner
's image
fields 一样。
启用时,二进制字段的get()
和set()
方法将store and retrieve the value in the ir.attachment
table. If you look at the code,您将看到附件使用以下值建立link到原始记录:
name
:二进制字段的名称,例如image
res_field
:二进制字段的名称,例如image
res_model
:包含字段的模型,例如res.partner
res_id
:二进制字段所属记录的ID
type
: 'binary'
datas
:虚拟字段,内容为二进制字段,实际存储在磁盘上
因此,如果您想检索 ir.attachment
记录,其中包含 ID 为 32 的 res.partner
的 image
的值,您可以使用以下 SQL :
SELECT id, store_fname FROM ir_attachment
WHERE res_model = 'res.partner' AND res_field = 'image' AND res_id = 32;
因为 ir_attachment
条目默认使用文件系统存储,store_fname
字段的实际值将为您提供 Odoo 文件存储中图像文件的路径,格式为 'ab/abcdef0123456789'
其中 abc...
值是文件的 SHA-1 哈希值。这就是 Odoo 实现附件去重的方式:具有相同文件的多个附件将映射到磁盘上相同的唯一文件。
如果您想以编程方式修改 image
字段的值,强烈建议使用 ORM API(例如 write()
方法),以避免造成不一致或必须手动重新实现文件存储系统。
参考资料
- 此处original 9.0 commit介绍了将二进制字段存储为附件的功能
- 并将res.partner的
image
字段转换为使用的9.0 commit。
我在 Odoo 9 PostgreSQL 数据库的 res_partner
table 中找不到 image
列? Odoo 9 在哪里存储这个图像字段?
从 Odoo 9 开始,许多 binary
字段已被修改为存储在 ir.attachment
模型中 (ir_attachment
table)。这样做是为了从文件系统存储(和重复数据删除属性)中获益并避免数据库膨胀。
这是在带有 attachment=True
参数的二进制字段上启用的,就像 res.partner
's image
fields 一样。
启用时,二进制字段的get()
和set()
方法将store and retrieve the value in the ir.attachment
table. If you look at the code,您将看到附件使用以下值建立link到原始记录:
name
:二进制字段的名称,例如image
res_field
:二进制字段的名称,例如image
res_model
:包含字段的模型,例如res.partner
res_id
:二进制字段所属记录的IDtype
:'binary'
datas
:虚拟字段,内容为二进制字段,实际存储在磁盘上
因此,如果您想检索 ir.attachment
记录,其中包含 ID 为 32 的 res.partner
的 image
的值,您可以使用以下 SQL :
SELECT id, store_fname FROM ir_attachment
WHERE res_model = 'res.partner' AND res_field = 'image' AND res_id = 32;
因为 ir_attachment
条目默认使用文件系统存储,store_fname
字段的实际值将为您提供 Odoo 文件存储中图像文件的路径,格式为 'ab/abcdef0123456789'
其中 abc...
值是文件的 SHA-1 哈希值。这就是 Odoo 实现附件去重的方式:具有相同文件的多个附件将映射到磁盘上相同的唯一文件。
如果您想以编程方式修改 image
字段的值,强烈建议使用 ORM API(例如 write()
方法),以避免造成不一致或必须手动重新实现文件存储系统。
参考资料
- 此处original 9.0 commit介绍了将二进制字段存储为附件的功能
- 并将res.partner的
image
字段转换为使用的9.0 commit。