odoo 11導入外部數據過程記錄


在開發過程中,遇見需要將SQL Server中的數據轉移到Pg數據庫的情況,那么如何做才能解決這一問題呢?

1.自己寫代碼,將數據從SQL Server到PG。

2.利用odoo自帶的導入功能導入。

出於時間緊張和熟悉odoo功能的原因,目前選取第二種解決方案,下面記錄具體的操作過程。

具體場景是主從兩張表,主表是

 

class EnglishLexicon(models.Model):

    _name = 'english.lexicon'
    _description = 'english lexicon'

    word = fields.Char(string="Word", required=True, index=True)
    lexicon_explain_ids = fields.One2many('english.lexicon.explain', 'english_lexicon_id', "Detail")
    america_accent = fields.Char(string="America Accent")
    british_accent = fields.Char(string="British Accent")
    chinese_mean = fields.Text(string="Chinese Mean")
    america_voice_url = fields.Char(string="America URL")
    british_voice_url = fields.Char(string="British URL")
    source_name = fields.Char(string="From")
    sequence = fields.Integer()
    is_updated = fields.Boolean(string="Is Updated", default=False)

 

從表是

class EnglishLexiconExplain(models.Model):

    _name = 'english.lexicon.explain'
    _description = 'english lexicon explain'

    english_lexicon_id = fields.Many2one('english.lexicon', 'EnglishLexicon', ondelete='cascade', required=True)
    order = fields.Integer()
    raw_html_mean = fields.Text(string="Html Mean")
    gram = fields.Char(string="Gram")
    english_mean = fields.Text(string="Processed Mean")
    chinese_mean = fields.Text(string="Chinese Mean")
    is_format = fields.Boolean(string="Is Format", default=False)

這里的難點是從表涉及到外鍵的問題。

 

1.從SQL Server導出數據

主表數據sql語句

 

--表頭
select '__export__.english_lexicon_'+Convert(nvarchar,id)+'_1' id,
World word,
AmericaAccent america_accent,
BrithAccent british_accent,
ChineseMean chinese_mean,
AmericaVoiceUrl america_voice_url,
BrithVoiceUrl british_voice_url,
SourceName source_name,
Sequence sequence,
'False' is_updated
from dbo.KS_EnglishLexicon
order by id,Sequence

 

注意這里的id字段,這里不再是單純的int類型的字段,而是'__export__.english_lexicon_'+id+'_1'的格式,即__export__.{odoo Model類名稱}_{id序列號}_1。

其他字段和類的字段名稱相同即可。

 

將查詢出來的數據放入到Excel中

從表sql語句

 

--表體

select
'__export__.english_lexicon_explain_'+Convert(nvarchar,id)+'_1' id,    
'__export__.english_lexicon_'+Convert(nvarchar,KS_EnglishLexiconId)+'_1' 'english_lexicon_id/id',    
[Order] [order],    
RawHtmlWorld raw_html_mean,    
Gram gram,    
EnglishMean english_mean,    
ChinsesMean chinese_mean,    
'False' is_format
from dbo.KS_EnglishLexiconExplain
order by KS_EnglishLexiconId,[Order]

 

這里需要注意的有兩點,第一點是id字段,基本和主表的格式一樣,只是最后再加一個'_1',寫死的,好像不加也可以。即'__export__.{odoo Model從表類名稱}_{序列號}_1'。

第二點就是外鍵的問題,這個基本上是我們處理問題的核心處,命名的格式是{odoo主表對應的類名稱}_id/id,我們的主表名為english_lexicon,所以結果是english_lexicon_id/id;

內容格式是'__export__.{odoo Model主表表類名稱}_{序列號}_1',這里是主表,即表示外鍵,結果是__export__.english_lexicon_具體id值_1.

其他字段頭內容和從表的字段名稱一致即可。

 

2.將Excel數據導入到odoo系統中

首先是主表導入,這里的id字段與External ID相對應,這個是關鍵點,其他字段依次相對應即可

然后我們點擊 Test Import按鈕,檢查是否有數據錯誤。

Loading結束之后,如果沒錯的話,就是以下情況

這樣我們就可以放心的點 Import按鈕將數據導入到我們的系統中去了。

從表的導入

這里像主表一樣,id字段與External ID字段對應,外鍵english_lexicon_id/id與EnglishLexicon/External ID相對應,其他字段對應即可。

像主表一樣測試導入 然后再導入,如果沒問題,基本上數據導入成功,並且建立了主從關系。

以上數據格式的確定是自己根據odoo導出數據之后進行分析的結果,這里以從表從odoo導出的數據為例

"id","english_lexicon_id/id","chinese_mean","is_format"
"__export__.english_lexicon_explain_1_1","__export__.english_lexicon_1_1","","False"

我們看到,不管是主鍵id還是外鍵,都是__export__.{表名稱}_{序列號}_1的格式,所以才有了之前的格式要求

 

此方法導入數據方便倒是挺方便的,只是需要每個類都要單獨的在左側菜單欄里調用出來,第二個從表的導入模塊是后來特意增加的。其實主表模塊在導入的時候有從表字段的選擇,是否可以主表從表數據可以整理到一個數據文件中,一塊將數據導入呢?有待進一步測試。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM