OpenERP在哪储存附件?

原文地址:http://cn.openerp.cn/where_to_store_attachement_in_openerp_7/

我们知道对OpenERP中的每个内部对象(比如:业务伙伴,采购订单,销售订单,发货单,等等)我们都可以添加任意的附件,如图片,文档,视频等。那么这些附件在OpenERP内部是如何管理的呢?

默认情况下,这些附件在OpenERP v7中是保存在数据库中的。我们知道当附件的数量比较大时,这会严重影响数据库的性能。其实在OpenERP 中我们可以通过设置ir.config.parameter参数来使附件保存在文件系统中,具体菜单位置是:”设置-技术-参数-系统参数-ir_attachement.location” (Settings->Technical->Parameters-System parameters- ir_attachment.location)

比如我们将ir_attachment.location设置为file:///filestore

那么这些附件就会保存在openerp根目录/filestore下, 系统使用sha1哈希算法来创建文件名所以重复的文件在系统中并不会多占空间。

目前只支持file:///协议,实际上我们可以很容易通过扩增模块来支持比如amazons3:///协议,这样我们就可以将附件保存在亚马逊的S3云服务了。

数据库保存附件的模式下,数据是保存在ir_attachment.db_datas
文件系统保存附件的模式下,文件名保存在ir_attachment.db_datas_fname

我们尚为提供这两种模式的自动转换机制。所以,如果你设置了这个参数,那么已存在的附件仍将保存在数据库中,只有新附件会保存在文件系统中,系统会尝试访问这两个不同的位置,所以也没什么问题(先检查db_datas,然后再检查db_datas_fname)

注:本文末尾提供的脚本可以自动将现有数据库中的附件转换到文件系统中

如果你移除了这个参数,你需要设法将在文件系统中保存的附件存回到数据库中,因为系统就只会通过数据库来检查附件了。

将现有数据库中的附件数据转移到文件系统中的脚本(替换URL为您的OpenERP实际访问URL地址):

#!/usr/bin/python
 
import xmlrpclib
 
username = 'admin' #the user
pwd = 'password'      #the password of the user
dbname = 'database'    #the database
 
# Get the uid
sock_common = xmlrpclib.ServerProxy ('<URL>/xmlrpc/common')
uid = sock_common.login(dbname, username, pwd)
sock = xmlrpclib.ServerProxy('<URL>/xmlrpc/object')
 
def migrate_attachment(att_id):
    # 1. get data
    att = sock.execute(dbname, uid, pwd, 'ir.attachment', 'read', att_id, ['datas'])
 
    data = att['datas']
 
    # Re-Write attachment
    a = sock.execute(dbname, uid, pwd, 'ir.attachment', 'write', [att_id], {'datas': data})
 
# SELECT attachments:
att_ids = sock.execute(dbname, uid, pwd, 'ir.attachment', 'search', [('store_fname','=',False)])
 
cnt = len(att_ids)
i = 0
for id in att_ids:
    att = sock.execute(dbname, uid, pwd, 'ir.attachment', 'read', id, ['datas','parent_id'])
 
    migrate_attachment(id)
    print 'Migrated ID %d (attachment %d of %d)' % (id,i,cnt)
    i = i + 1
 
print "done ..."

运行这个脚本后,我们还需要清除ir_attachements表:

update ir_attachment set db_datas = null where store_fname is not null
vacuum (full, analyze) ir_attachment

openerp 常见问题 OpenERP在哪储存附件?(转载)的更多相关文章

  1. openerp 常见问题 OpenERP为什么选择了时区后时间还是不对?(转载)

    OpenERP为什么选择了时区后时间还是不对? 原文地址:http://cn.openerp.cn/%E4%B8%BA%E4%BB%80%E4%B9%88%E9%80%89%E6%8B%A9%E4%B ...

  2. openerp经典收藏 深入理解对象(转载)

    深入理解对象(转载) 原文地址:http://shine-it.net/index.php/topic,2159.0.htmlhttp://blog.sina.com.cn/s/blog_57ded9 ...

  3. openerp 7.0邮件接收中文附件乱码问题解决办法

    openerp 7.0邮件接收中文附件乱码问题解决办法: 修改文件\addons\mail\mail_thread.py #1064 line插入代码: h=email.Header.Header(n ...

  4. OpenERP在哪储存附件?

    我们知道对OpenERP中的每个内部对象(比如:业务伙伴,采购订单,销售订单,发货单,等等)我们都可以添加任意的附件,如图片,文档,视频等.那么这些附件在OpenERP内部是如何管理的呢? 默认情况下 ...

  5. centos 安装 openerp

    遇到问题:近日公司提出openerp的搭建,觉得openerp里的有些模块比较适合公司,openerp的运作,估计会有利于公司系统化的管理.于是我就去了解openrp,然后来搭建这套强大的系统. 解决 ...

  6. ubuntu下实现openerp 7使用nginx反正代理及绑定域名

    这里要记录一个nginx upstream实现反向代理的配置过程. 连接vps的ssh. 先安装nginx sudo apt-get install nginx 修改/etc/nginx/nginx. ...

  7. openerp 7 在ubuntu上设置开机启动

    我们要让openerp开机运行起来. 第一步,先进入系统目录: cd /etc/init.d 第二步,创建文件.命名为openerp-server sudo vi openepr-server 第三步 ...

  8. ubuntu 12.04上安装OpenERP 7的一次记录

    登陆ssh, 先更新系统: sudo apt-get update && sudo apt-get dist-upgrade 接着再为openerp运行创建一个系统用户,用户名就叫op ...

  9. 【转】CentOS 6.3 X64自动安装OpenERP 7.0脚本

    原文地址:OpenERP 7.0安装与配置 #!/bin/bash -e # Modified script from Carlos E. Fonseca Zorrilla # . Add the t ...

随机推荐

  1. swift 委托代理传值

    委托代理 1.定义个协议 2.声明一个委托代理 3.指定委托代理,调用委托实现的协议方法 4实现LoadingDelegate协议 代码如下: import UIKit //1.定义个协议 proto ...

  2. 常见的 HTTP错误代码大全

    一些常见的状态码为: - 服务器成功返回网页 - 请求的网页不存在 - 服务不可用 详细分解: 1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态代码. 代码 说明 (继续) 请求者应当继 ...

  3. 【MongoDB】MongoDB服务器搭建(Unix/Linux)

    1.安装MongboDB安装包(开源免费的哟) 在Mac 下 brew install mongoDB 就可以啦 安装要等一会儿,大概200M 2. cd到MongboDB文件夹 - 如果是用home ...

  4. PHP 错误处理机制

    在日常的项目开发过程中,总是会出现一些我们意想不到的异常错误,如果我们对此没有进行相对完善的处理,那么程序看上去也很不专业,也很可能就会成为别人攻击系统的有效信息:有些错误异常会终止脚本执行,这个时候 ...

  5. dom操作中的js优化

    频繁地对于DOM进行操作的很是损耗性能,但在富网页应用中我们编写脚本无可避免地要跟DOM打交道,到底怎么才能优化这个性能瓶颈呢,大致从以下三种情况去考虑: 访问和修改DOM元素 修改DOM样式,会造成 ...

  6. JavaScript之六种排序法

    1.冒泡排序循环的最大值从length递减每次循环只能排好最后一个,然后递减到第一个 function bubbleSort(){ var changedData = new Array(); var ...

  7. 64位Windows7升级IE11后无法启动的解决办法

    1.控制面板\网络和 Internet\Internet选项 2.在高级选项卡的“安全”组配置

  8. 北大ACM(POJ1010-STAMPS)

    Question:http://poj.org/problem?id=1010问题点:DFS.剪枝. Memory: 220K Time: 32MS Language: C++ Result: Acc ...

  9. [Bootstrap]组件(二)

    按钮组 .btn-group>.btn : 一组.btn按钮包裹在.btn-group 外包元素.btn-group  {position/display/} 按钮元素.btn <div ...

  10. 《锋利的jQuery》心得笔记--Four Sections

    第八章 1.    当父元素设置position:relative的时候,子元素设置position:absolute.这个子元素设置在父元素的任何位置. 第九章 1.    对可视区进行纠正,通知浏 ...