だから、私が制御できないcsvファイルがあるとしましょう:
a.csv
b.csv
c.csv
それらはすべて異なるヘッダー名を持っています。すべてのデータをテーブル a、b、および c にダンプしました。ここで、新しい値 (同じヘッダー フィールド) を持つ別の a.csv を取得した場合、古いものにはない新しい a の値のみを挿入するにはどうすればよいですか?
例: テーブルには名前と年齢のヘッダーがあります。
'Bob' 25
'Mary' 50
そして、次のように解析する新しい a.csv を取得します。
'Bob' 25
'Susie' 60
現在のテーブルに固有の行のみを追加するにはどうすればよいですか (たとえば、ボブではなくスージーのみをテーブルに追加する)。それぞれに特定の一意の ID がないため、主キーを使用できません。複数のヘッダー フィールドもあるため、すべてのヘッダー フィールドを主キーとして使用しようとすると、「指定されたキーが長すぎます」と返されます。
行全体が一意であることを確認し、一意である場合はテーブルに追加する必要があります。INSERT IGNORE を試しましたが、一意のキーがないため、正しく機能しません。助言がありますか?追加情報があれば投稿します。
現在の試行:
cursor.execute("ALTER TABLE temp ADD PRIMARY KEY" + uniqueline)
cursor.execute("INSERT IGNORE INTO " + tablename + " SELECT * FROM temp")
tablename はテーブルの名前、temp は csv コードが送信された場所、uniqueline は現在フォームの最初の 5 つのフィールド (field1、field2、field 3、field4、field5) です。フィールドが 5 つ未満の場合は、すべてのフィールド。
ありがとう!
編集:
cursor.execute("INSERT INTO " + tablename + " SELECT * FROM temp where " + uniqueline + " NOT IN (SELECT * FROM " + tablename + ")")
一度は (空のテーブルで) 動作しますが、もう一度実行してテストすると、基本的にフリーズし、終了しません。現在、これらの「ファントムテーブル」があり、削除しようとすると「不明なテーブル」と表示されますが、作成しようとすると「テーブルが既に存在します」と表示されます。また、テーブルをフリーズせずにテーブルに何かを追加または削除することもできません。一意のインデックスをもう一度付けてみます。でも、みんなの助けに感謝します!