2011-07-11 29 views
2

pyodbcを使用して、Microsoft Access(.accdbまたは.mdb)データベースのレコード値を置き換えることができるかどうかを判断しようとしています。私はドキュメンテーションを注ぎ、 "Row Values Can Be Replaced"と書かれているところに注意しましたが、私はそれを動作させることができませんでした。Python:pyodbcを使用して行フィールド値を置換する

具体的には、私はpython変数から行の値を置き換えようとしています。私が試した:

  • を「真」に接続自動コミットを設定

    それは、データ型の問題ではないことを確認しました

をここに私のコードのスニペットです私はSQLクエリを実行して、fetchone()を使って1つのレコードを取得します(このスクリプトではクエリは1つのレコードのみを返します)、フィールドの既存の値を取得していますz変数)、フィールドに書きたい新しい値を取得していますそのスクリプトで作成された既存のPython辞書からアクセスすることによって、

pSQL = "SELECT * FROM %s WHERE %s = '%s'" % (reviewTBL, newID, basinID) 

cursor.execute(pSQL) 
record = cursor.fetchone() 
if record: 
    oldVal = record[z] 
    val = codeCrosswalk[oldVal] 
    record[z] = val 

私はビットが動作しないと思うことができるすべてを試しました。ヘルプドキュメントを誤解していますか?

スクリプトは正常に実行されますが、新しく割り当てられた値は決してコミットしないようです。私はレコードの[z] = val行の後にprint str(record [z])を入れて、テーブルのフィールドに新しい値があり、新しい値が印刷されているかどうかを確認しようとしましたが、if私は、スクリプトが終了した後に、テーブルのフィールドに古い値が残っていることをチェックします。

これについての洞察は非常にありがたいです。私は、MS AccessデータベースでVBAを使用する方法テーブル内のレコードをループへのADOレコードセットと変数からフィールドに値を割り当てる。

おかげで、 トム

答えて

0

をpyodbcのドキュメントから事実を意味する「行の値を交換することができる」というヨーヨー返された行オブジェクトの値を変更することができます。たとえば、それらを使用する前にクリーンアップまたは変換を実行することができます。これは、これらの変更が自動的にデータベースに保持されることを意味するものではありません。そのためには、SQL UPDATEステートメントを使用する必要があります。

+0

これは残念ですが、試行錯誤の後に私が期待していたものでした。実際にフィールド値を取得してからそれを必要とする操作で達成できなかった機能性の点で本当にあなたに何を提供しているのかはわかりませんが、操作がまだ達成できる2番目のフィールドの値に依存していなければ値をつかんで操作することで、フィット感が得られます。 – turkishgold

+0

pyodbcの「行」が必要な別の関数を持っていても、それを渡す前にいくつかの変更を加えたい場合に便利です。 PythonのDB APIは単にそれを "シーケンス"にする必要があり、タプルは最もシンプルで最も明白な選択肢になります。しかし、たとえばそれがタプルの場合は、変更された値で新しいタプルを作成する必要があります。行を更新する方が便利です。これが実際に頻繁に必要かどうかは別のことですが、私はそれに同意します。しかし、厳密に言えば、ドキュメントは、「DB APIの要件を超えて」追加の機能としてこれを言及すると、 – Steven

関連する問題