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属性为不同的值
原文地址:https://www.cnblogs.com/pywjh/p/13586955.html