在开发过程中,遇见需要将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. [Q&A] 解决 SBT 初始化或下载 jar 包速度慢的问题

    原文地址:https://www.cnblogs.com/memento/p/9153012.html 在 C:\Users\用户名\.sbt 目录下添加一个 "repositories&q ...

  2. 解决Firefox下,页面元素不刷新问题

    由于FireFox的刷新机制与IE有较大区别.所以javascript代码 document.location.reload();通常在IE上工作正常,在Firefox下效果却并不理想,这是因为Fir ...

  3. 盐城 - 开设IT公司的好地方

    盐城:位于江苏省北部,这一好像只能算三线的城市,不久前当选为“国家中心城市”.在全国仅有的50城市中名列34.它可成为发展IT产业的好地方. (1)人才济济.从这里走出去的高级人才数不胜数,留在这里的 ...

  4. .Net Core 2.0 生态(2).NET Core 2.0 特性介绍和使用指南

    .NET Core 2.0发布日期:2017年8月14日 前言 这一篇会比较长,介绍了.NET Core 2.0新特性.工具支持及系统生态,现状及未来计划,可以作为一门技术的概述来读,也可以作为学习路 ...

  5. [20171031]rman xxx Failure.txt

    [20171031]rman xxx Failure.txt --//简单测试 List Failure, Advise Failure and Repair Failure命令在11g下,也许以后工 ...

  6. MailKit帮助类

    public class EmailHelp { /// <summary> /// Smtp服务器地址 /// </summary> private static reado ...

  7. 描述性统计的matlab实现

    理论讲的再多不会做也白弄 直接上手 一.针对接近正态分布的(均值,方差,标准差,极差,变异系数,偏度,峰度) 这里我必须提前说明一点就是,你在写好函数后,函数的名是dts,你保存的文件名也必须是dts ...

  8. 08 LaTeX学习系列之---Latex 的中文操作

    目录 目录: (一)方法一:导入 ctex 宏包 1.说明: 2.源代码: 3.效果展示: (二)使用ctex的文档类 1.说明: 2.源代码: 3.显示效果: (三)查看帮助 1.Ctex的使用手册 ...

  9. Linux 小知识翻译 - 「Linux的吉祥物企鹅叫什么名字?」

    这次说说Linux的吉祥物 *企鹅* 都知道Linux的吉祥物是企鹅,但是这个企鹅叫什么名字呢? 它的名字就是「Tux」,注意可不是「Tax」(税收). 具体参考 wiki:中文解释  英文的解释更为 ...

  10. 变量计算——强制类型转换的js面试题

    console.log(1+"2"+"2"); console.log(1++"2"+"2"); console.log ...