1

keyとしてitemIDを含み、次に次のようなペアの束を含むdictがあります。

(91311703, [(3300, 2), (3301, 3), (3327, 3), (3330, 2), (3386, 2), (3392, 2), (3
402, 3), (3413, 3), (3426, 3), (3449, 3)])

各ペアの最初の番号は一意のID番号であり、2番目の番号は1〜5の値です。これをsqlite3を使用してテーブルに書き込みたいので、この例では、itemIDが91311703の1つの行があり、3300列に2、3301列に3、3327列に3の値があります。等

ひねりは、テーブルにすべての可能なID番号の列があり、合計で約200〜300になることです。渡すdictにID番号が含まれていない場合は、その列に0を付けたいので、この例では、列3302-3326、3328、3329、3331-3385などはすべて値0を取得します。

私が考えた1つの可能性は、各列のデフォルト値が0のこのテーブルを作成し、dictを渡すと、そこに含まれるID番号列の値のみが更新されることです。ただし、これはコーディングが不十分な方法のように思われるので、提案を受け付けています。別のオプションはある種のものでifありelse、ID番号がdictで見つかった場合は、そのペアの値を使用し、それ以外の場合は0を使用しますが、これを行うにはあまり良い方法ではないようです。

このdictを調べて、このdictのペアのID番号と一致する列に値を割り当てるために必要なPython + sqlite3コードは何ですか?dictにID番号が見つからない列に0を割り当てるために何を提案しますか?私の目標は、itemIDごとに1行にすることです(つまり、私の辞書ではキーごとに1行にします)。

4

1 に答える 1

1

実際に必要な列のみを設定して、SQL を動的に作成することもできます。

INSERT INTO MyTable (itemID, col3300, col3301, col3327, col3330, ...)
VALUES (91311703, 2, 3, 3, 2, ...)

または、すべての列でコマンドを使用し、未使用の列を次のように設定します0

INSERT INTO MyTable (itemID, col3300, col3301, col3302, col3303, ...)
VALUES (91311703, 2, 3, 0, 0, ...)

ただし、未使用の値が多数ある場合、このテーブル構造は非効率的です。

適切に正規化すると、アイテム ID、ID、および値のすべての有効な組み合わせを含む 3 つの列のみを持つテーブルが作成されます。

INSERT INTO MyTable(itemID, ID, value)
VALUES (91311703, 3300, 2),
       (91311703, 3301, 3),
       (91311703, 3327, 3),
       (91311703, 3330, 2),
       ...

これらの組織のどちらが適しているかは、実行するクエリの種類によって異なります。

于 2012-11-21T20:47:20.957 に答える