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

如何使用Odoo Python API提取数据?Odoo11迁移数据至AWS数据库代码问询

Odoo 11 Python API 数据提取及AWS数据库迁移实现方案

前置依赖安装

执行以下命令安装所需第三方库:

# Odoo RPC调用库
pip install odoorpc
# 如AWS端使用PostgreSQL(RDS默认常用),安装对应驱动
pip install psycopg2-binary
# 如AWS端使用MySQL,安装对应驱动
pip install mysql-connector-python

核心实现代码

以下示例实现从Odoo 11提取销售订单数据,写入AWS PostgreSQL数据库的完整逻辑,可根据实际业务需求调整提取的模型和字段:

import odoorpc
import psycopg2
from psycopg2.extras import execute_values

# --------------------------
# 1. 连接Odoo 11实例
# --------------------------
odoo = odoorpc.ODOO('你的Odoo域名/IP', port=8069) # 端口默认8069,如有自定义请修改
odoo.login('你的Odoo数据库名', 'Odoo账号', 'Odoo密码')

# --------------------------
# 2. 提取Odoo数据
# 示例提取销售订单(sale.order)模型数据,可替换为你需要的模型:res.partner(联系人)、product.product(产品)等
# --------------------------
# 先查询符合条件的记录ID,支持添加过滤条件,示例为提取所有已确认的销售订单
order_ids = odoo.env['sale.order'].search([('state', '=', 'sale')])
# 批量读取指定字段数据
order_data = odoo.env['sale.order'].read(order_ids, ['name', 'partner_id', 'date_order', 'amount_total', 'state'])

# 处理Odoo关联字段格式,比如partner_id是(ID, 名称)的元组,单独提取ID
processed_data = []
for item in order_data:
    processed_data.append((
        item['id'],
        item['name'],
        item['partner_id'][0] if item['partner_id'] else None,
        item['date_order'],
        item['amount_total'],
        item['state']
    ))

# --------------------------
# 3. 写入AWS数据库(以PostgreSQL为例)
# --------------------------
# AWS RDS连接配置
aws_conn = psycopg2.connect(
    host="你的AWS RDS端点",
    database="你的AWS数据库名",
    user="数据库账号",
    password="数据库密码",
    port=5432
)
cur = aws_conn.cursor()

# 批量插入数据,提前在AWS端建好对应表,示例表结构:
# CREATE TABLE odoo_sale_orders (
#     odoo_id INT PRIMARY KEY,
#     order_name VARCHAR(128),
#     partner_id INT,
#     order_date TIMESTAMP,
#     total_amount NUMERIC(10,2),
#     state VARCHAR(32)
# );
insert_sql = """
INSERT INTO odoo_sale_orders (odoo_id, order_name, partner_id, order_date, total_amount, state)
VALUES %s
ON CONFLICT (odoo_id) DO UPDATE SET
order_name = EXCLUDED.order_name,
partner_id = EXCLUDED.partner_id,
order_date = EXCLUDED.order_date,
total_amount = EXCLUDED.total_amount,
state = EXCLUDED.state
"""
execute_values(cur, insert_sql, processed_data)
aws_conn.commit()

# 关闭连接
cur.close()
aws_conn.close()
odoo.logout()

注意事项

  • 数据量较大时需做分页查询,search方法支持limit和offset参数,避免单次查询导致Odoo服务或本地内存溢出
  • 迁移前先抽取10-100条数据做校验,确认字段映射、格式转换逻辑符合预期,再全量执行
  • 账号密码等敏感信息不要硬编码在代码中,建议存入环境变量或加密配置文件读取
  • Odoo的多对多(many2many)、一对多(one2many)字段需要单独处理关联关系,需额外建关联表存储对应映射

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 18:36:03