2017-04-13 6 views
1

私はこれに似た他の質問を見てきましたが、回答の説明がほとんどなく、あいまいです。 私が持っているのは、n個の列を含む6つのテーブルを持つSQLデータベースです。私は、挿入するのではなく、Pythonリストからのデータでテーブルの1つの列を更新する必要があります。これはgbufidsと呼ばれるリストであり、整数で構成されていますが、各エントリは[(1、)、(2、)、(3))ではなく[0,1,2,3]というタプルに含まれていません。 変更したいテーブル名はバージョンと呼ばれ、列はObjectIDと呼ばれます。私は見つけた様々な方法を試しましたが、それを行う必要がある方法で仕事をした人はいませんでした。 cur.executemany( 'UPDATEバージョンのObjectID =?'、((val、))を更新する前に、リスト内の各項目をタプルに変換する必要があると考えられる次のものを使用しました。 )in val for gbufids)Python、sqlite3、リストを使用してSQLデータベース内の列を更新します。

これに続いてコミットとクローズが行われます。 UPDATEを使用している場合はWHERE句が必要だと読んだことがありますが、行については少し混乱していました。私にとっては、行はすべての行のセルですが、これはおそらく意味がありません。誰もが私のDB、テーブルや列に固有の答えを提供することができた場合、それはWHERE句なし

+0

SQLテーブルが順序付けられてい 。行はどのように識別されるべきですか? –

+0

まあ、述べたように、私は名前付きの列の最初のセルから指定されたリストの各エントリを持つ名前付き列の最後のセルに移入する名前付きの列を名前付きテーブルに持っています。元の投稿に記載されている情報でそれを達成する方法を教えていただけますか?あなたが何かを省略したと感じるならば、それはおそらく私がそれについて確信していて、何か助けや説明をすることができるからです。おかげで – EMJAY

+0

いくつかの例のデータを表示します。どのリストエントリがどのテーブル行に入るか? –

答えて

0

UPDATE文を理解されるであろうテーブルのすべての行は、あなたが値で更新されますexecutemanyに入ると、渡された最後の値が入力されたすべての行が表示されます。各値を特定の行と照合するには、文の実行ごとにどの行を置換するかをデータベースに指示する方法が必要です。更新された値のリストの長さが表の行の数と等しく、リストの順序が単純なSELECT * FROM tableで取得する行の順序と同じである場合は、最も簡単な方法は、テーブル内のrowidのリストを取得するには、次のようになります。

rowids = [row[0] for row in cur.execute('SELECT rowid FROM Versions')] 

次にあなたがrowidsgbufidsをペアリングし、あなたのexecutemanyにそれを渡すことができます。

cur.executemany('UPDATE Versions SET ObjectID=? WHERE rowid=?', zip(gbufids, rowids)) 
+0

ありがとう、私は私の必要とするコードを持っています。新しい質問やコメントとして投稿することはできませんでした。他の人が使うことができるように私が持っているものを共有したいと思います。 – EMJAY

+0

@EMJAY自分の質問への回答を投稿するのに間違ったことはありません。他人の質問だったらあなたのように答えとして投稿してください。 – glibdud

+0

私はしようとしましたが、私がここに最初にいたときに追加した以前の回答のため、回答がブロックされている可能性があります。彼らは私を悩ましている。どうやら、私はシステムがそれらを正当なものとして認識するように、先験的な回答を編集することができます。私がそれをしたら、私はこの答えを更新します。 – EMJAY

関連する問題