0

我有这个脚本

SELECT = """
            select 
              coalesce (p.ID,'') as id, 
              coalesce (p.name,'') as name, 
            from TABLE as p  
         """
self.cur.execute(SELECT)
for row in self.cur.itermap():         
    id = '%(id)s' % row
    name = '%(name)s' % row

    xml +="  <item>\n"      
    xml +="    <id>"         + id + "</id>\n"
    xml +="    <name>"    + name + "</name>\n"    
    xml +="  </item>\n\n"
    
#save xml to file here
f = open...

  

我需要将数据从庞大的数据库保存到文件中。我的数据库中有 10 000 个(最多 40000 个)项目,脚本运行需要很长时间(1 小时或更长时间)才能完成。

如何从数据库中获取我需要的数据并将其“立即”保存到文件中?(尽可能快?我不需要 xml 输出,因为我可以稍后在我的服务器上处理来自输出的数据。我只需要尽快完成。有什么想法吗?

非常感谢!

PS 我发现了一件有趣的事情:当我使用此代码每 2000 条记录“擦除”xml 变量并将其保存到另一个变量时,它的运行速度非常快!所以根据我以前的代码填写xml变量肯定有一些“错误”。

result = float(id)/2000
if result == int(result):
  xml_whole += xml
  xml = ""
4

2 回答 2

0

哇,用代码测试后

result = float(id)/2000
if result == int(result):
  xml_whole += xml
  xml = ""

我的脚本是快50 倍!我想知道为什么 python 使用 xml +=... 这么慢?

于 2013-10-20T21:35:35.357 回答
0

你做了很多不必要的工作(但是,如果你删除xml变量,你写的数据和以前不一样......)

为什么不直接编写 XML 呢?您也可以避免使用这两个COALESCEs,并在 Python 中编写该检查(如果 ID 为 null,则生成 id '' 等)。

SELECT = """
            select 
              coalesce (p.ID,'') as id, 
              coalesce (p.name,'') as name, 
            from TABLE as p  
         """
self.cur.execute(SELECT)

# Open XML file
f = open("file.xml", ...)
f.write("<?xml version... (what encoding?)

for row in self.cur.itermap():
    f.write("<item>\n    <id>%(id)s</id>\n    <name>%(name)s</name>\n</item>\n"

# Other f.writes() if necessary
f.close()
于 2013-10-20T22:43:21.163 回答