2016-06-17 9 views
1

このコードを実行するたびに、「列名1は一意ではありません」というメッセージが表示されます。どうして?IntegrityError:列名1が一意ではありません

graph = fb.graph.api(token) 
f = graph.get_object(cat = 'single', id = '765898450131958', fields=   ['likes']) 
strona = f['id'] 
liczbalajkow = f['likes'] 
print liczbalajkow 
conn = sqlite3.connect('fb_likes2.sqlite') 
cur = conn.cursor() 
cur.execute(''' 
CREATE TABLE IF NOT EXISTS Likes (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, name1 TEXT UNIQUE PRIMARY KEY, likes_count INTEGER, date DATES)'''); 
cur.execute('''INSERT INTO Likes (name1, likes_count, date) 
VALUES (?, ?, ?)''', (strona, liczbalajkow, date.today(),)); 
conn.commit() 

答えて

1

恐らく真であり、name1のUNIQUE CONSTRAINTに違反しようとしていると考えられます。 CREATE TABLEステートメントは、フィールドname1をユニークとして定義します:name1 TEXT UNIQUE PRIMARY KEY

+1

これは、name1(おそらくnullまたは空の文字列)と同じ値を持つ2つの行を挿入しようとしたことを説明しています。 – Hogan

+0

一意のPRIMARY KEYを削除してもname1 TEXTだけ残しても、 "column name1は一意ではありません"と表示されます。 –

+0

最初に作成したテーブルを削除しましたか?存在するのでテーブル作成をスキップするので、エラーは発生しません。 – Dresden

0

なぜなら、 'name1'列の重複エントリをテーブルに挿入しようとしているからです。 おそらく、あなたはあるループの中でこのコマンドを呼び出しています.FBから受け取ったデータには、複数の検索結果に対して同じページ名が含まれています。 (以前の実行時の)古いデータベースを削除しなかったこともあります。

テーブルに挿入しようとしているログファイルの値を表示または保存しようとすることができます。

正しい解決策は、テーブルの外側のループを作成することです。 (重複を避けるために)テーブルから

  • 明確な記録
  • 存在しない場合はFBの開始ループはデータベースに
  • 挿入レコードを照会表を作成

    1. オープンデータベース接続
    2. :それは次のようにする必要があります
    3. 閉ループ
    4. データベース接続
  • 関連する問題