2012-04-03 7 views
0

名前がテーブルにまだ存在しない場合、つまり特定のテーブルに挿入するだけの挿入をたくさん行っています。重複したくない。 、それは1挿入し、そうでなければ、単に参照を返していない場合は、テーブル内の同じ名前のアーティストがある場合MySQLのチェックを 'programside'からMySQLサーバー自体に変更する

def create_artist(artist_name): 
    artistid = has_artist(artist_name) 
    if not artistid: 
     sql['cursor'].execute("INSERT INTO artists VALUES (NULL, ?)", (artist_name,)) 
     artistid = has_artist(artist_name) 
    return artistid[0] 

def has_artist(artist_name): 
    sql['cursor'].execute("SELECT id FROM artists WHERE artist_name = ?", (artist_name,)) 
    return (sql['cursor'].fetchone()) 

それは基本的にアップになります。私は今、このように近づいています。これを行うためのより良い方法が必要です。このプロセス全体をクエリに移すことができるので、これをすべてSQLに移すことができますか?

答えて

2

INSERT IGNOREを参照してください。これには、IGNOREを引き起こすテーブル上のUNIQUEインデックスが必要です。

INSERT IGNORE INTO artists VALUES (NULL, ?) 
+0

これは非常にうまくいくようですが、SQLiteに「INSERTまたはIGNORE」するだけです。挿入されたばかりの行またはすでに存在していた行も選択できますか? – wvd

+0

申し訳ありませんが、あなたのタイトルにはMySQLが含まれていましたので、SQLiteではなくMySQLで回答していました。あなたが持っている例にIGNOREを追加することで、あなたが望むように正確に動作します - あなたはINSERT IGNOREの後にselectを実行し、すでにそこにあったか挿入された行のIDを取得します。 – scwagner

+0

ああ、私は2つのインサートを持っていきますが、それは問題ありません。私に多くのコードを保存し、混乱のために残念です。これを受け入れました。どうもありがとうございました。 – wvd

関連する問題