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、...]それらを出力できますが、リストをデータベース2に保存するにはどうすればよいですか

ここに画像の説明を入力

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 などは、列名として不適切な選択です。

  • 使用できる列名とエスケープ パラメーター (疑問符) の数に制限がある場合があります。

  • 1 つのテーブルに 300 列というのは非常に多く、設計が悪いことを示している可能性があります。

したがって、テーブルを正規化したままにして、テーブルの列に意味のある名前を付けてください。また、MySQLdb と呼ばれる Python 用のより使いやすい Mysql アダプターがあることに注意してください。これにより、接続文字列の問題を回避できます。

于 2012-09-17T20:44:09.137 に答える