zoukankan      html  css  js  c++  java
  • 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的格式,所以才有了之前的格式要求

    此方法导入数据方便倒是挺方便的,只是需要每个类都要单独的在左侧菜单栏里调用出来,第二个从表的导入模块是后来特意增加的。其实主表模块在导入的时候有从表字段的选择,是否可以主表从表数据可以整理到一个数据文件中,一块将数据导入呢?有待进一步测试。

  • 相关阅读:
    vue实现图片预览旋转/放大缩小/上下切换等功能
    VMware安装遇到的问题
    webstrom弹出Server's certificate is not trusted 解决方法
    this.setData is not a function;at pages/index/index onLoad function;at api request success callback function TypeError: this.setData is not a function
    小程序结构目录
    第一个微信小程序
    用C#开发ActiveX控件给VB使用
    处理WIN7,winxp下安装vb6,出现config.nt 无法运行16位DOS程序故障的方法
    VISUALSVN: UNABLE TO CONNECT TO A REPOSITORY AT URL 无法连接主机的解决办法
    程序全屏开机运行,不允许操作电脑桌面,适用工控机触摸屏
  • 原文地址:https://www.cnblogs.com/crazyguo/p/8534679.html
Copyright © 2011-2022 走看看