odoo 数据库连接层

一、概述

   odoo的数据库连接层功能是连接odoo code与数据库,在odoo.sql_db模块中实现,区别于ORM。

二、涉及的类

   涉及的类主要有:①Cursor,cr变量所指向的对象②Environment,可以访问访问cr、uid、context、注册类、管理记录集缓存;③Registry,能够获取到注册model,cursor()方法能返回新的游标;④Connection⑤ConnectionPool,直接实现与数据库的连接。

三、cr的实现过程

   3.1 第一步,请求处理

#  截取部分代码
Class Root(object):
    def dispatch(self, environ, start_response):
        #  pass
        with request:
            db = request.session.db
            if db:
                try:
                    # 调用odoo.registry()
                    odoo.registry(db).check_signaling()
                    with odoo.tools.mute_logger('odoo.sql_db'):
                        ir_http = request.registry['ir.http']
                except (AttributeError, psycopg2.OperationalError, psycopg2.ProgrammingError):
        #  pass

   3.2 第二步,使用db_name创建并初始化Registry实例

#  odoo/__init__.py/def registry()
def registry(database_name=None):
    """
    Return the model registry for the given database, or the database mentioned
    on the current thread. If the registry does not exist yet, it is created on
    the fly.
    """
    if database_name is None:
        import threading
        database_name = threading.currentThread().dbname
        #  创建Registry对象
    return modules.registry.Registry(database_name)

#  odoo/modules/registry.py
#  创建Registry对象具体实现
class Registry(Mapping):
    """ Model registry for a particular database.

    The registry is essentially a mapping between model names and model classes.
    There is one registry instance per database.
    model名字与类之间的映射

    """
    #  返回Registry对象
    def __new__(cls, db_name):
        """ Return the registry for the given database name."""
        with cls._lock:
            try:
                return cls.registries[db_name]
            except KeyError:
                #  返回Registry对象的实现方法调用
                return cls.new(db_name)
            finally:
                # set db tracker - cleaned up at the WSGI dispatching phase in
                # odoo.service.wsgi_server.application
                threading.current_thread().dbname = db_name
    
    #  返回Registry对象
    @classmethod
    def new(cls, db_name, force_demo=False, status=None, update_module=False):
        """ Create and return a new registry for the given database name. """
        with cls._lock:
            with odoo.api.Environment.manage():
                registry = object.__new__(cls)
                #  调用初始化方法
                registry.init
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Odoo是一个开源的ERP(企业资源规划)和CRM(客户关系管理)软件,它使用PostgreSQL作为其数据库。配置Odoo数据库PostgreSQL可以按照以下步骤进行: 1. 安装PostgreSQL:首先,您需要在您的服务器上安装PostgreSQL数据库。您可以从PostgreSQL官方网站下载并安装适合您操作系统的版本。 2. 创建Odoo数据库:在安装好PostgreSQL后,您需要创建一个新的数据库来存储Odoo的数据。您可以使用PostgreSQL的管理工具(如pgAdmin)或命令行工具(如psql)来创建数据库。 3. 配置Odoo数据库连接:在Odoo中,您需要配置数据库连接以使用PostgreSQL作为数据库。您可以在Odoo的设置页面中找到此选项。在数据库连接配置中,输入您的PostgreSQL服务器地址、用户名、密码和数据库名称等信息。 4. 导入数据:如果您的Odoo应用程序已经有一些数据需要导入,您可以使用PostgreSQL的数据导入/导出功能将数据从其他源导入到您的Odoo数据库中。您可以使用pgAdmin或psql命令行工具来执行此操作。 5. 配置Odoo应用程序:完成数据库配置后,您需要配置Odoo应用程序的其他方面,例如设置组织结构、设置用户权限等。这些设置可以在Odoo的设置页面中找到。 6. 测试连接:最后,您需要测试Odoo应用程序是否可以成功连接到PostgreSQL数据库并正常工作。您可以使用Odoo的管理员账户登录到应用程序,并确保所有功能都按预期工作。 请注意,上述步骤是一个概述,具体配置过程可能因您的操作系统、安装包和配置要求而有所不同。建议您参考Odoo官方文档或与当地技术支持联系,以获取更详细的配置说明和指导。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值