如何使用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
相关产品推荐
相关产品推荐

