下面这一段代码是zope的External Method。主要是分析XML文件,向zope批量导入数据。
注意:get_transaction().commit()
,这是把ZODB的temporary Database里的数据搬到main Database。这样在分析XML文件时,创建的对象才能立即生效。
# coding=utf-8
from urllib import urlopen
import xml.sax.handler
import xml.sax
import time
try:
from transaction import get as get_transaction
except ImportError:
pass
class PDENewContent:
def __init__(self,context):
self.context = context
def pdeNewPerson(self,erp_id = 0,attributes = {}):
new_erpid = 0
portal_type = 'Person'
portal = self.context.getPortalObject()
module = portal.getDefaultModule(portal_type)
person = None
if erp_id == 0:
person = module.newContent(portal_type = portal_type)
new_erpid = person.id
else:
person = module.restrictedTraverse('person_module/' + str(erp_id))
#set pid
if attributes.has_key("autoid"):
person.edit(pid = attributes["autoid"])
#set first_name
if attributes.has_key("p_na"):
person.edit(first_name = attributes["p_na"])
#set Gender
if attributes.has_key("gender"):
if attributes["gender"] == u"1":
person.edit(gender = 'female')
elif attributes["gender"] == u"0":
person.edit(gender = 'male')
#set birthday
if attributes.has_key("birthday"):
person.edit(birthday = attributes["birthday"])
#set Address
default_address = None
if 'default_address' in person.objectIds():
default_address = person['default_address']
else:
default_address = person.newContent(portal_type = 'Address',id = 'default_address')
if attributes.has_key("Home_Address"):
default_address.edit(street_address = attributes["Home_Address"])
#set WorkFlow
if person.getValidationState() == 'draft':
if attributes.has_key("state") and attributes["state"] == u"1":
module.portal_workflow.doActionFor(person,'validate_action',comment='')
class PersonHandler(xml.sax.handler.ContentHandler):
def __init__(self,context,portal_type):
self.newContent = PDENewContent(context = context)
#get all ERP5 person's pid
persons = context.getPortalObject().getDefaultModule(portal_type).contentValues(portal_type = portal_type)
self.pids = {}
for p in persons:
pid = getattr(p,'pid',0)
if pid <> 0:
self.pids[pid] = p.id
#create log file
self.log_file = open('/home/master/instances/var/development-site/Extensions/log1.txt','wb')
def __del__(self):
self.log_file.close()
def startElement(self, name, attributes):
#Create person
if name == "person":
autoid = attributes["autoid"]
if autoid in self.pids.keys():
self.newContent.pdeNewPerson(erp_id = self.pids[autoid],attributes = attributes)
# commit any changes that may be pending.
get_transaction().commit()
else:
#if person not in person_module create new person
newid = self.newContent.pdeNewPerson(attributes = attributes)
if newid <> 0 :
self.pids[autoid] = newid
#log
self.log_file.write(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()) + ' ' + autoid + ' ' + attributes["p_no"] + '\n')
def importXML(self):
handler = PersonHandler(context = self,portal_type = 'Person')
try:
webpage = urlopen('ftp://127.0.0.1/person.xml')
#text = webpage.read().decode('gbk').encode('UTF-8')
#text = text.replace('gb2312', 'utf-8')
#text = '<?xml version="1.0" encoding="utf-8"?> <doc> ' + text + ' </doc>'
parser = xml.sax.parse(webpage,handler)
finally:
webpage.close()
<?xml version="1.0" encoding="utf-8"?>
<doc>
<person gender="0" state="1" autoid="112702" p_no="Z0001" p_na="张三" birthday="08//11/1988" Home_Address="广东" />
<person gender="0" state="0" autoid="107500" p_no="Z0002" p_na="李四" birthday="10/1/1979" Home_Address="广东" />
<person gender="0" state="0" autoid="107501" p_no="Z0003" p_na="王五" birthday="07/22/1987" Home_Address="广东" />
</doc>
分享到:
相关推荐
资源名:ExcelToAccess批量导入数据程序asp源码 资源类型:程序源代码 源码说明: 1、可以将excel电子表格直接导入到AC或MSSQL数据库指定的表中 2、可以自行配置 3、完全免费下载 4、其他下载之后自行测试 5、目前...
可以通过对存储了大量记录的txt文件进行拆分处理形成数组,进而实现批量导入数据到数据库。
plsql批量导入数据
内含有各种批量导入数据操作,并可以对比执行速度,百万数据导入只需一秒钟
使用excel批量导入数据
使用csv文件批量导入数据 CSV高级应用
在数据管理系统中,添加大量数据,如果通过手动录入的话,相当费事费力。最近开发一款数据管理系统,所以我花了半天时间将该功能梳理出来。该资料将框架和其他功能都简化,主要实现该功能。
1、可以将excel电子表格直接导入到AC或MSSQL数据库指定的表中 2、可以自行配置 3、完全免费下载 4、其他下载之后自行测试 5、目前支持20个字段的导入 6、字典信息可以自己添加 7、10000条数据导入大约10秒左右
批量导入文件夹的数据,规则文件名和不规则文件名
再者导入数据用的是py脚本,脚本内容参考至自强学堂–中级教程–数据导入. 注:本文主要介绍自己学习的经验总结,而非教程! 正文:首先说明采用Django中bulk_create()函数来实现数据批量导入功能,为什么会选择它呢? ...
实现从Excel批量导入数据到MySQL 数据库中,可以同时导入多张Excel表,使用时在excel.table 中配置需要导入的表及可!
批量导入Excel数据到数据库,.NET开发,带数据校验、事务回滚、Excel预览、日志功能的完整开发实例
很好的批量导入,仅需要很少的限制就可以批量倒进数据(测试的时候几千条是没什么问题的,几万条就没测试过)
ASP实例开发源码—ExcelToAccess批量导入数据 v1.0.zip ASP实例开发源码—ExcelToAccess批量导入数据 v1.0.zip ASP实例开发源码—ExcelToAccess批量导入数据 v1.0.zip
C#从CSV文件批量导入数据保存到数据库,以第一行列名作为数据库里的列名……导出貌似有问题,导入分两种:第一:从加载预览的dataset导入,第二:从csv文件导入,里面注释写的很清楚了,可以看看……
从特定网站的特定位置批量导入数据到Excel的范例,可以自行修改成导入其他网站的其他数据。
ExcelToAccess批量导入数据v1.0.zip
Java实现从excel中批量高效导入数据到数据库中,包括图片的导入存储,读取图片显示在jsp页面等,需要下载JspSmartUpload.jar和jxl.jar两个jar包,将两个包导入项目才能运行