• Django 运行odoo环境所生成数据库(Django运行ODOO环境)完美运行


    公司现在的新方向,将odoo一部分业务剥离出来,单独使用,但数据库还是使用postgres

    现在还只是测试,记录一些笔记,方便以后查阅(内容也是网上很多资料的汇总版)

    写完了再回顾的时候我就在想,使用Django框架+OdooRPC,会不会更加方便?(如果只能通过事务操作的话)

    需要的python库:psycopg2 ; psycopg2-binary

    settings文件中,数据库的设置如下:

    # Database
    # https://docs.djangoproject.com/en/3.1/ref/settings/#databases
    
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'NAME': 'dev',
            'USER': 'admin',
            'PASSWORD': 'admin',
            'HOST': '',  #本地
            'PORT': '',  #默认端口
        }
    }

     经过测试,直接走sql语句查询行得通:(记录如下)

    from django.db import connection
    
    cursor = connection.cursor()
    
    cursor.execute('select * from res_users order by id limit 10')
    
    users = cursor.fetchall()

    但是输出结果不是很乐观,没有深究:

    In [8]: users[0]                                                                                                                                           
    Out[8]: 
    (1,
     False,
     '__system__',
     None,
     1,
     2,
     datetime.datetime(2019, 9, 28, 2, 52, 55, 373160),
     '<span data-o-mail-quote="1">-- <br data-o-mail-quote="1">
    System</span>',
     None,
     False,
     None,
     1,
     datetime.datetime(2020, 7, 22, 1, 51, 41, 728112),
     None,
     None,
     'inbox',
     'onboarding_emoji',
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     None,
     'un_sync')

    另一种方法就是通过Django的ORM映射来操作数据库,过程如下:

    1. 生成对应的models文件(生成的models文件,与manage.py同级):

    python manage.py inspectdb > models.py

    2. 欲操作的表,将manage属性设置为True(为True才能通过ORM进行操作):  

    class Meta:
        managed = True
        db_table = 'fr_fund_daily'

    3. 执行迁移文件

    python manage.py migrate

    之后就不知道怎么做了,按道理models文件按照正常的Django操作类,操作数据增删改查,是没有问题的,

    但是可能是odoo的表太多,关联字段太多,报错一大片,而且表的数量多的惊人,电脑分分钟卡死,不是很推荐(也可能有什么办法能快速运行吧,但是我还不知道)

    最后可能还是要通过事务来操作数据库。

    如果你有更好的办法,请务必告诉我,点赞转发投币什么的,下次一定!

    写在最后:如果你真的有好的办法进行开发,请联系我,一同交流学习进步,谢谢!

    PS:

    完美运行!!!

    有一天我忽然发现,按照前面的

    python manage.py inspectdb > models.py

     命令生成了model文件,然后迁移文件的时候,可能会出现很多问题,但是,我今天才反应过来:

    运行迁移文件只为了为了同步odoo的postgresql数据库的数据,如果只是为了通过Model映射操作数据库,其实不用运行迁移文件

    直接新建一个app,引用model文件,直接操作就可以了;

    因为通过模型映射操作数据库,最后也是生成sql语句去查询数据,只要能生成sql语句,就可以了。

    emmmmm........

    前面的推论,都是我python manager.py shell 尝试的,当我真的运行项目的时候,也报了很多的错23333

    这里把我遇到的都记录一下,可能对有幸看到此处的客观有用

    1. max_length属性问题:自动生成的是-1,但是在Django里面是不允许的,因为odoo数据库已经生成了,所以,改成一个整数其实就可以了,但是为了避免之后遇到Django自带的前面校验问题,我将此属性设置成了1024
    2. 级联删除问题:自带全是models.DO_NOTHING, 为了避免出现关键字参数和位置参数导致的报错,我将models.DO_NOTHING全局替换成了on_delete=.......
    3. 反向访问器冲突:Django支持反向查询,如果你不指定,ForeignKey字段,默认的是源模型的小写名称加_set,但是如果odoo设计模型的时候,存在多个字段关联同一个模型,那么默认的反向查询管理器就会同名而导致报错,所以需要自定义一下related_name属性。(这是一个繁琐的过程,你需要把一个模型里面,同时外键关联了同一个模型的字段都设置related_name属性为不同的值
  • 相关阅读:
    Set.prototype (Set) – JavaScript 中文开发手册
    wordpress插件 : 利用Max Mega Menu实现二级菜单的伸缩
    HTML textarea placeholder 属性
    Number.parseInt (Number) – JavaScript 中文开发手册
    Java 实例 – 获取 URL响应头的日期信息
    PHP date_default_timezone_set() 函数
    SIMD.fromInt32x4Bits (SIMD) – JavaScript 中文开发手册
    使用 mysql_random_data_load 生成随机数据
    python基本数据类型
    day02代码
  • 原文地址:https://www.cnblogs.com/pywjh/p/13586955.html
Copyright © 2020-2023  润新知