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+中勒索病毒后数据修复及重新实施过程记录
近期某客户中了勒索病毒,虽然前期多次提醒客户注意异地备份,但始终未执行,导致悲剧. 经过几天的努力,该客户信息系统已基本恢复正常运行,现将相关过程记录如下,作为警示. 方案抉择 交赎金解密:风险过高, ...
随机推荐
- Ubuntu 16.04.4 LTS + Ambari 2.6.1.5 + HDP 2.6.4.0 安装部署
服务器 主机名 master slave1 slave2 slave3 IP 192.168.1.40 192.168.1.41 192.168.1.42 192.168.1.43 离线包服务器: 1 ...
- GDAL获取投影坐标系注意问题
GDAL提供了获取投影坐标系的C函数GDALGetProjectionRef以及对应的C++函数GetProjectionRef, 但在获取投影坐标系之前需要设置通过CPLSetConfigOptio ...
- 一. Redis 常用命令
键值相关命令 1. KETS 查询所有的key 127.0.0.1:6379> keys * 1) "tony"2) "hexu1"3) "he ...
- JAVA学习笔记:注释、变量的声明和定义、
本文内容: 注释 变量的声明和定义 成员变量和局部变量 首发时间:2018-03-16 15:59 注释: 单行注释:// 多行注释:/* - */ 变量: 变量是内存中的一个存储区域,变量的定义就是 ...
- Android、IOS文字居中偏离的解决方案
前言 移动端开发,经常会遇到的问题,就是文字居中.一般都只能往css方向去fix这个问题. 自己以前也用过position:relative;top:-*px的方式去解决.
- SQL注入介绍
一.SQL注入概念 1.sql注入是一种将sql代码添加到输入参数中 2.传递到sql服务器解析并执行的一种攻击手法 举例:某个网站的用户名为name=‘admin’.执行时为select ...
- 4.92Python数据类型之(7)字典
目录 目录 前言 (一)字典的基本知识 ==1.字典的基本格式== (二)字典的操作 ==1.字典元素的增加== ==2.字典值的查找== ==3.字典的修改== ==4.字典的删除== ==5.字典 ...
- Lua基础之MetaTable(6)
Lua基础之MetaTable(6) 转载地址:http://nova-fusion.com/2011/06/30/lua-metatables-tutorial/ 关于MetaTable的补充:ht ...
- web笔试
类型判断用到哪些方法? typeof和instanceof 值类型和引用类型的区别? 根据 JavaScript中的变量类型传递方式,又分为值类型和引用类型,在参数传递方式上,值类型是按值传递,引用类 ...
- (14)Python类