You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Python元组列表导入Odoo数据库?

用Python批量导入数据到Odoo自定义模型

直接通过Odoo的Python API处理是最稳妥的方案,能避开CSV导入时的约束冲突问题,具体步骤如下:

1. 建立Odoo环境连接

根据你的脚本运行场景选择连接方式:

  • 外部脚本(远程连接):用Odoo官方RPC库
import xmlrpc.client

url = 'http://你的Odoo实例地址'
db = '你的数据库名'
username = '登录账号'
password = '登录密码'

# 验证身份
common = xmlrpc.client.ServerProxy(f'{url}/xmlrpc/2/common')
uid = common.authenticate(db, username, password, {})
# 获取模型操作接口
models = xmlrpc.client.ServerProxy(f'{url}/xmlrpc/2/object')
  • Odoo模块内脚本(本地运行):直接使用内置环境
# 在自定义模块的方法中调用
model = self.env['你的自定义模型名']

2. 转换元组为Odoo字段字典

假设你的元组顺序对应模型字段field1、field2、field3,把元组列表转成Odoo可识别的字典列表:

# 示例元组列表
tuple_list = [('值1', '值2', '值3'), ('值4', '值5', '值6')]
# 转为字典列表
record_dicts = [
    {'field1': t[0], 'field2': t[1], 'field3': t[2]}
    for t in tuple_list
]

3. 批量创建记录

调用Odoo的create方法批量插入,若涉及外键约束,需确保关联记录已存在:

  • RPC方式:
# 批量创建记录
models.execute_kw(db, uid, password, '你的自定义模型名', 'create', [record_dicts])
  • 模块内方式:
model.create(record_dicts)

4. 处理约束冲突

如果遇到唯一字段重复等约束问题,可提前校验并选择更新或跳过:

# 示例:检查field1是否重复,存在则更新,不存在则创建
for t in tuple_list:
    existing_record = model.search([('field1', '=', t[0])], limit=1)
    if existing_record:
        existing_record.write({'field2': t[1], 'field3': t[2]})
    else:
        model.create({'field1': t[0], 'field2': t[1], 'field3': t[2]})

为什么不推荐CSV导入?

CSV导入时Odoo会强制校验所有约束,且难以处理复杂关联数据或自定义逻辑;Python API则能灵活控制导入流程,提前处理冲突,还可加入日志方便排查问题。

内容的提问来源于stack exchange,提问作者Dartage

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 09:45:55