在开发过程中,遇见需要将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的格式,所以才有了之前的格式要求

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

odoo 11导入外部数据过程记录的更多相关文章

  1. mysql快速导入5000万条数据过程记录(LOAD DATA INFILE方式)

    mysql快速导入5000万条数据过程记录(LOAD DATA INFILE方式) 首先将要导入的数据文件top5000W.txt放入到数据库数据目录/var/local/mysql/data/${d ...

  2. MySQL 导入外部数据

    手工为数据库录入数据: 1 -- 使用数据库 2 use test; 3 4 -- 创建fruits数据表 5 create table fruits( 6 f_id char(10) not nul ...

  3. MySQL 导入外部数据时报错:1153: Got a packet bigger than 'max_allowed_packet' 解决方案

    MySQL 导入外部数据时报错:1153: Got a packet bigger than 'max_allowed_packet' 解决方案 zoerywzhou@163.com http://w ...

  4. ORACLE-SQLLOAD导入外部数据详解

    今天公司需要把外部文本的一些数据导入到数据库.这里把相关步骤和注意的地方记录,供需要的人参考学习!这里的环境是在windows下的数据库,linux或者其他数据库同理! 1.准备工作:创建需要导入数据 ...

  5. discuz全新安装升级,导入旧数据过程,顺便gbk转utf8

    由于discuz官方已经不更新了,现在又只有现成的utf8版本,没有gbk版本.我们原来使用的是gbk编码的,最近想改版,顺便升级一下,就索性把gbk也换成utf8吧,这样以后也方便,国际化嘛! 第一 ...

  6. odoo11 外部数据导入方法2

    前面有一篇文章分析了如何使用2个分开的文件分别将外部数据导入到odoo对应的系统当中,如之前所说,是存在缺点的,现在测试将所有数据放入一个文件中将主表与从表的数据一次性导入,这样可以很方便的利用odo ...

  7. Mysql命令行导入sql数据

    mysqldump  是在  操作系统命令行下运行的,不是在 MySQL 命令行下运行的. 登陆数据库: 登陆本地mysql : mysql -h localhost -u root -p123456 ...

  8. Redis数据导入工具优化过程总结

    Redis数据导入工具优化过程总结 背景 使用C++开发了一个Redis数据导入工具 从oracle中将所有表数据导入到redis中: 不是单纯的数据导入,每条oracle中的原有记录,需要经过业务逻 ...

  9. 某企业用友U8+中勒索病毒后数据修复及重新实施过程记录

    近期某客户中了勒索病毒,虽然前期多次提醒客户注意异地备份,但始终未执行,导致悲剧. 经过几天的努力,该客户信息系统已基本恢复正常运行,现将相关过程记录如下,作为警示. 方案抉择 交赎金解密:风险过高, ...

随机推荐

  1. 传统BI还是自助式BI---BI与数据分析 ZT

    自助式BI或者自助式数据分析是最近几年兴起的一个概念.根据Gartner发布的信息,Self Service Business Intelligence(SSBI)被定义为“终端用户在被批准和支持的平 ...

  2. 安卓开发_WebView设置打开网页缩放问题

    之前实现打开网页的方式,测试后,发现不能够对网页进行缩放操作,这对部分网页来说是十分不便的, 百度了一下解决方案 其实只需要加几行代码就可以实现网页缩放操作 settings.setUseWideVi ...

  3. 【详细】【转】CentOS 7部署ASP.NET Core应用程序

    很早就看过关于net core部署在Linux上的文章,自己也曾亲自将项目部署在Linux上,今天看到这篇文章,为其格式之工整而转! 1.环境准备 网上看了一下,Linux云服务器还挺贵的,那就只好先 ...

  4. 从零自学Java-9.描述对象

    1.为类或对象创建变量:2.使用对象和类的方法:3.调用方法并返回一个值:4.创建构造函数:5.给方法传递参数:6.使用this来引用对象:7.创建新对象. 程序VirusLab:测试Virus类的功 ...

  5. 【待完成】[MapReduce_9] MapReduce 的 Shuffle 机制

    0. 说明 待补充...

  6. 第 15 章 位操作(dualview)

    /*----------------------------------- dualview.c -- 位字段和按位运算符 -----------------------------------*/ ...

  7. 个人技术博客——linux服务器配置以及flask框架

    本次的软件工程实践,我负责我们组后台服务的搭建,我选用了bandwagon的服务器,安装的是Debian GNU/Linux,全程在root用户下操作,后端服务是用python的flask框架,数据库 ...

  8. 基于tomcat插件的maven多模块工程热部署(附插件源码)

    内容属原创,转载请注明出处 写在前面的话 最近一直比较纠结,归根结底在于工程的模块化拆分.以前也干过这事,但是一直对以前的结果不满意,这会重操旧业,希望搞出个自己满意的结果. 之前有什么不满意的呢? ...

  9. Django templates 模板的语法

    MVC 以及 MTV MVC: M : model -->> 存取数据(模型) V: view -->> 信息的展示(视图) C: controller -->> ...

  10. WPFのGrid布局的深度理解

    以下以row定义说明问题,列类似: <Grid>        <Grid.RowDefinitions>            <RowDefinition /> ...