2016-11-27 19 views
0

と共存されていない場合、主キーは、私は、行によって、ファイルの行からCSVデータを解析していて、重複行が存在することができAUTOINCREMENTと1から始まるです。のSQLite PythonのINSERT、私は多くの列を持つテーブルを持っている多くの変数

この場合、私はテーブルメインに、すでに(当然の増分主キーを持つ)以下に示すすべての変数に同じ値を持つ行を存在し、存在しない場合、これらの変数に新しい行を作成するかどうかを確認する必要があります。

この場合、INSERT OR IGNOREは機能しません。理由はわかりません。事前に

おかげ

cur.execute('''INSERT OR IGNORE INTO Main (sku_id, skucat_id, prodline_id, lor_id, 
        skucat_id, georegion_id, geosector_id, month, year, 
        sellin_un, sellin_rur, sellout_un, sellout_rur) 
        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)''', (sku_id, 
        skucat_id, prodline_id, lor_id, skucat_id, georegion_id, 
        geosector_id, month, year, sellin_un, sellin_rur, 
        sellout_un, sellout_rur,)) 
+0

どのエラーが表示されますか? – ettanany

+0

@ettanany errosはありませんが、1つのファイルでスクリプトを2回実行すると、重複して行が2倍になります。これは私ではないが、メイン(sku_id TEXT、skucat_id TEXT、 prodline_idのTEXT、lor_id TEXT、 georegion_id TEXT、geosector_id TEXT、月のTEXT、年TEXT、 sellin_unのINTEGER、sellin_rurのINTEGER、sellout_unのINTEGERを存在する場合、それはCREATE TABLEを作成する方法、コードであります、 sellout_rurのINTEGER)「」 ')私は、主キーと間違って何かを考えて –

+0

@ettanany、私は同じファイルから作成しております他のテーブルが、私は行の値から取っています主キーを持っている原因、うんごめん逃し –

答えて

1

ザ・インサートの一部を無視するか、無視するには、競合に基づいています。 SQLite documentation for on conflictsで説明したように、テーブルには一意または主キーが必要です。

は、あなたがユニークであるかなどsku_idなど、主キーとして機能することができ、あなたのテーブルの列または列のセットを持っていますか?これにより競合が発生し、その制約が適用されるたびに挿入が無視されます。今は、テーブルに制約のないデータを挿入するだけなので、挿入が実行されるたびに何もチェックされません。

+0

オートインクリメントありません高い私はID列ですユニークなAUTOINCREMENTを作成します。 cur.execute( ''」 、NOTがメイン(ID INTEGER PRIMARY KEY AUTOINCREMENT、 sku_id TEXT、skucat_id TEXT、prodline_id TEXT、lor_id TEXT、 georegion_id TEXT、geosector_id TEXT、月のTEXT、年TEXT、 sellin_unのINTEGERを存在する場合のCREATE TABLEすべてのあなたは一意のIDを持つことになりますが、それはあなたが挿入されているデータに対して何もチェックしません作る挿入を意味し、sellin_rur INTEGER、sellout_unのINTEGER、 sellout_rurのINTEGER)「」 ') –

+0

まさに、。たとえば、unqiueとして挿入するデータに何かを指定する必要があります。 CREATE TABLEが存在しない場合、メイン(sku_id TEXT、skucat_id TEXT、UNIQUE(sku_id)); – bgeo

+0

を理解していますが、この場合はユニークな列はありません。この場合、どうすれば対処できますか?ありがとうございます。 –

関連する問題