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

Odoo 15与Django集成:构建REST API时如何连接Odoo数据库?

连接Odoo数据库并在Django REST API中获取数据的方法

方法1:使用Odoo官方RPC API(推荐)

Odoo原生支持XML-RPC和JSON-RPC接口,这是官方认可的安全方式,无需直接操作底层数据库,能兼容Odoo的权限控制和业务逻辑。

实现步骤:

  • 安装依赖:pip install xmlrpc(若用JSON-RPC可搭配requests)
  • 在Django中编写连接与调用代码:
import xmlrpc.client

def connect_odoo_fetch_data():
    # 替换为你的Odoo实例信息
    odoo_url = "http://your-odoo-server-ip:8069"
    db_name = "your_odoo_database"
    username = "odoo_user"
    password = "odoo_password"

    # 认证获取用户ID
    common_proxy = xmlrpc.client.ServerProxy(f"{odoo_url}/xmlrpc/2/common")
    uid = common_proxy.authenticate(db_name, username, password, {})
    
    # 调用模型接口
    model_proxy = xmlrpc.client.ServerProxy(f"{odoo_url}/xmlrpc/2/object")
    # 示例:获取企业客户数据
    customer_data = model_proxy.execute_kw(
        db_name, uid, password,
        "res.partner", "search_read",
        [[["is_company", "=", True]]],
        {"fields": ["name", "email", "phone"], "limit": 20}
    )
    return customer_data
  • 在Django REST API的视图中调用上述函数,通过序列化器返回标准化的API响应。

方法2:直接连接Odoo的PostgreSQL数据库

如果需要执行复杂的跨表查询或追求极致性能,可直接连接Odoo使用的PostgreSQL数据库,但需注意Odoo表结构复杂,直接写入可能破坏数据一致性,仅建议用于只读场景。

实现步骤:

  • 安装依赖:pip install psycopg2-binary
  • 在Django的settings.py中添加Odoo数据库配置:
DATABASES = {
    'default': {
        # 你的Django主数据库配置
    },
    'odoo_db': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'your_odoo_database',
        'USER': 'postgres',  # Odoo数据库用户,通常是postgres
        'PASSWORD': 'db_password',
        'HOST': 'localhost',  # Odoo数据库所在主机
        'PORT': '5432',
    }
}
  • 使用Django的多数据库查询语法获取数据:
from django.db import connection

def fetch_odoo_customers_via_db():
    with connection.cursor() as cursor:
        cursor.execute("""
            SELECT name, email, phone 
            FROM res_partner 
            WHERE is_company = true 
            LIMIT 20;
        """)
        rows = cursor.fetchall()
    # 转换为字典格式便于序列化
    return [{"name": row[0], "email": row[1], "phone": row[2]} for row in rows]

注意:需提前熟悉Odoo的表结构命名规则(如res_partner对应客户模型),避免误查或误操作。

方法3:使用第三方封装库

借助odoorpc这类第三方库,可简化Odoo连接与数据操作的代码:

  • 安装依赖:pip install odoorpc
  • 示例代码:
import odoorpc

def get_odoo_data_with_odoorpc():
    odoo = odoorpc.ODOO("your-odoo-server-ip", port=8069)
    odoo.login("your_odoo_database", "odoo_user", "odoo_password")
    # 直接调用Odoo模型的方法
    customers = odoo.env["res.partner"].search_read(
        [["is_company", "=", True]], 
        ["name", "email", "phone"],
        limit=20
    )
    return customers

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:35:23