0

我需要从一个数据库(sql server)解析xml(xmldata),然后将它们提取并加载到一个干净的表中,然后使用python将它们存储到另一个数据库(mysql)

这是我的代码

import pyodbc
from lxml import etree
from StringIO import StringIO


con_c = pyodbc.connect('DSN=database1;Database=y;UID=x;PWD=y')
con_a = pyodbc.connect('DSN=database2;Database=x;UID=x;PWD=y')

cur_a = con_a.cursor() 
cur_c = con_c.cursor() 

cur_c.execute("""
select top 100
id,
xmldata
from table1
""")

rows_c = cur_c.fetchall()
for row in rows_c:

     x = str(row.xmldata)
     root = etree.fromstring(x)                  
     build_text_list = etree.XPath("//text()")   
     texts = build_text_list(root)              

     print((texts))

现在..这就是我所坚持的。“文本”现在是价值的“列表”......我可以将 [scott,xx,...] 打印出来,但是如何将列表存储到 Database2

在此处输入图像描述

4

1 回答 1

1
con_a.execute("INSERT INTO table2 (variable1, variable2) VALUES(?, ?)", *texts[:2])
con_a.commit()

或使用executemany

params = [ ('A', 1), ('B', 2) ]
con_a.executemany("insert into t(name, id) values (?, ?)", params)
con_a.commit()

一些额外的想法:

  • variable1、variable2 等是列名的错误选择。

  • 您可以使用多少列名称和转义参数(问号)可能存在限制。

  • 一张表中的 300 列看起来非常多,可能是糟糕设计的标志。

所以我希望你能保持你的表格规范化,并给表格的列赋予有意义的名字。另外,请注意有一个更易于使用的用于 python 的 Mysql 适配器,称为 MySQLdb。它可以让您避免连接字符串的麻烦。

于 2012-09-17T20:44:09.137 回答