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的格式,所以才有了之前的格式要求。
此方法导入数据方便倒是挺方便的,只是需要每个类都要单独的在左侧菜单栏里调用出来,第二个从表的导入模块是后来特意增加的。其实主表模块在导入的时候有从表字段的选择,是否可以主表从表数据可以整理到一个数据文件中,一块将数据导入呢?有待进一步测试。
odoo 11导入外部数据过程记录的更多相关文章
- mysql快速导入5000万条数据过程记录(LOAD DATA INFILE方式)
mysql快速导入5000万条数据过程记录(LOAD DATA INFILE方式) 首先将要导入的数据文件top5000W.txt放入到数据库数据目录/var/local/mysql/data/${d ...
- MySQL 导入外部数据
手工为数据库录入数据: 1 -- 使用数据库 2 use test; 3 4 -- 创建fruits数据表 5 create table fruits( 6 f_id char(10) not nul ...
- 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 ...
- ORACLE-SQLLOAD导入外部数据详解
今天公司需要把外部文本的一些数据导入到数据库.这里把相关步骤和注意的地方记录,供需要的人参考学习!这里的环境是在windows下的数据库,linux或者其他数据库同理! 1.准备工作:创建需要导入数据 ...
- discuz全新安装升级,导入旧数据过程,顺便gbk转utf8
由于discuz官方已经不更新了,现在又只有现成的utf8版本,没有gbk版本.我们原来使用的是gbk编码的,最近想改版,顺便升级一下,就索性把gbk也换成utf8吧,这样以后也方便,国际化嘛! 第一 ...
- odoo11 外部数据导入方法2
前面有一篇文章分析了如何使用2个分开的文件分别将外部数据导入到odoo对应的系统当中,如之前所说,是存在缺点的,现在测试将所有数据放入一个文件中将主表与从表的数据一次性导入,这样可以很方便的利用odo ...
- Mysql命令行导入sql数据
mysqldump 是在 操作系统命令行下运行的,不是在 MySQL 命令行下运行的. 登陆数据库: 登陆本地mysql : mysql -h localhost -u root -p123456 ...
- Redis数据导入工具优化过程总结
Redis数据导入工具优化过程总结 背景 使用C++开发了一个Redis数据导入工具 从oracle中将所有表数据导入到redis中: 不是单纯的数据导入,每条oracle中的原有记录,需要经过业务逻 ...
- 某企业用友U8+中勒索病毒后数据修复及重新实施过程记录
近期某客户中了勒索病毒,虽然前期多次提醒客户注意异地备份,但始终未执行,导致悲剧. 经过几天的努力,该客户信息系统已基本恢复正常运行,现将相关过程记录如下,作为警示. 方案抉择 交赎金解密:风险过高, ...
随机推荐
- openlayer3之高级标注实现
首先看实现效果: 实现要点: 1)树形标注实现 2)复杂标注样式定义 3)效率优化 1.树形标注实现 树形标注采用字体符号来实现,包括以下几个步骤 1)载入字体 2)设置标注值与字体对照关系 3)设置 ...
- 《ASP.NET MVC企业实战》(三)MVC开发前奏
在上一篇“<ASP.NET MVC企业级实战>(二)MVC开发前奏”中跟随作者大概了解了一些C#3.0和3.5中的新特性.本篇继续以这样的方式来学习C#中的一些特性. 一.C#3. ...
- Java并发编程(十)阻塞队列
使用非阻塞队列的时候有一个很大问题就是:它不会对当前线程产生阻塞,那么在面对类似消费者-生产者的模型时,就必须额外地实现同步策略以及线程间唤醒策略,这个实现起来就非常麻烦.但是有了阻塞队列就不一样了, ...
- flume组件汇总 source、sink、channel
Flume Source Source类型 说明 Avro Source 支持Avro协议(实际上是Avro RPC),内置支持 Thrift Source 支持Thrift协议,内置支持 Exec ...
- nginx的ngx_http_realip_module模块和http头X-Forwarded-For、X-Real-IP
ngx_http_realip_module模块 realip模块作用:当本机的nginx处于反向代理的后端时可以获取到用户的真实ip.可以让accesslog记录用户真实IP地址. set_real ...
- 使用wxpy自动发送微信消息(加强版)
通过使用wxpy自动发送微信消息后,笔者又加强了发送消息,堪称消息爆炸式发送 目前设置的为10秒发送一次,发送9次,每次发送10条内容 import requests import wxpy from ...
- python socket 套接字编程 单进程服务器 实现多客户端访问
服务器: import socket #单进程服务器 实现多客户端访问 IO复用 #吧所有的客户端套接字 放在一个列表里面,一次又一次的便利过滤 server = socket.socket(sock ...
- mybatis 相关
一.mybatis转义问题 mybatis中SQL在 mapper.xml 中书写时,如果有 < .>.<=.>= 时会出错,应该使用转义的写法. 写法一 转义 < ...
- 通过logstash过滤、分析日志数据
logstash是怎么工作的呢? Logstash是一个开源的.服务端的数据处理pipeline(管道),它可以接收多个源的数据.然后对它们进行转换.最终将它们发送到指定类型的目的地.Logstash ...
- 【ReactNative】Mac下分分钟打包 Android apk
时间:2016-11-20 09:17:07 地址:https://github.com/zhongxia245/blog/issues/52 Mac 下 ReactNative如何打包构建Andro ...