公司現在的新方向,將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">\nSystem</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
這里把我遇到的都記錄一下,可能對有幸看到此處的客觀有用
- max_length屬性問題:自動生成的是-1,但是在Django里面是不允許的,因為odoo數據庫已經生成了,所以,改成一個整數其實就可以了,但是為了避免之后遇到Django自帶的前面校驗問題,我將此屬性設置成了1024
- 級聯刪除問題:自帶全是models.DO_NOTHING, 為了避免出現關鍵字參數和位置參數導致的報錯,我將models.DO_NOTHING全局替換成了on_delete=.......
- 反向訪問器沖突:Django支持反向查詢,如果你不指定,ForeignKey字段,默認的是源模型的小寫名稱加_set,但是如果odoo設計模型的時候,存在多個字段關聯同一個模型,那么默認的反向查詢管理器就會同名而導致報錯,所以需要自定義一下related_name屬性。(這是一個繁瑣的過程,你需要把一個模型里面,同時外鍵關聯了同一個模型的字段都設置related_name屬性為不同的值
