XML ファイルからのデータの解析と複数のデータベースへの保存を自動化するプログラムに取り組んでいます。(具体的には、USGS リアルタイム水質サービス、興味のある方はhttp://waterservices.usgs.gov/rest/WaterML-Interim-REST-Service.htmlを参照) LXML と PYODBC を使用して Python 2.5.1 で記述されています。データベースは Microsoft Access 2000 にあります。
接続関数は次のとおりです:
def get_AccessConnection(db):
connString = 'DRIVER={Microsoft Access Driver (*.mdb)};DBQ=' + db
cnxn = pyodbc.connect(connString, autocommit=False)
cursor = cnxn. cursor()
return cnxn, cursor
ここで、db はデータベースへのファイルパスです。
プログラムは次のことを行います。 a)
データベースへの接続を開きます
b) そのデータベースの 2 ~ 8 個の XML ファイルを解析し、それらの値を一連のレコードに構築してデータベースに挿入します (ユーザー定義の辞書構造ではなく、ネストされた辞書構造を使用します)。 type)
c) 一連のレコードをループし、cursor.execute() - 各レコードに対して SQL クエリを実行します
d) データベース接続をコミットして閉じます
cursor.execute() 呼び出しでエラーがスローされると、トレースバックとクエリがログ ファイルに書き込まれ、次に進みます。
私の同僚が自分のマシンでそれを実行すると、ある特定のデータベースに対して、特定のレコードが存在せず、エラーが記録されません。マシンからまったく同じネットワーク パスを介してデータベースのまったく同じコピーに対してまったく同じコードを実行すると、存在するはずのすべてのデータが存在します。
同僚と私は、Microsoft Access 2000 と同じバージョンの Python、lxml、および pyodbc がインストールされた Windows XP コンピュータを使用しています。Microsoft ODBC ドライバーのバージョンが同じかどうかを確認する方法がわかりません。そこにある記録とそうでない記録の間に違いを見つけることができませんでした。私は、同じ問題が他のデータベースで発生するかどうか、および 3 人目の同僚のコンピューターでも発生するかどうかをテスト中です。
私が本当に知りたいのは、私には意味が分からないので、誰もがこれを引き起こすと考えることができるものです. 要約すると、SQL クエリを実行する Python コードは、あるコンピューターではその半分を黙って失敗し、別のコンピューターでは完全に動作します。
編集:
もう問題ありません。同僚にもう一度実行してもらいましたが、データベースは完全に更新され、レコードの欠落はありませんでした。そもそもなぜ失敗したのか、また起こるのかどうかはまだわかりませんが、「問題は解決しました」.