2016-06-17 2 views
1

Каждый раз, когда я запускаю этот код, я получаю «имя столбца1 не уникально». Зачем?IntegrityError: column name1 не уникален

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

Возможно, только потому, что это правда, и вы пытаетесь нарушить УНИКАЛЬНЫЙ КОНСТРАКЦИЯ по имени1. Ваш оператор CREATE TABLE определяет имя поля1 как уникальное: name1 TEXT UNIQUE PRIMARY KEY.

+1

объясните, что это означает, что он попытался вставить две строки с одинаковым значением для name1 (возможно, null или пустую строку). – Hogan

+0

, даже если я удаляю UNIQUE PRIMARY KEY и оставляю только имя1 TEXT, он все равно дает «имя столбца1 не уникально». –

+0

Удалили ли вы стол, который вы создали при первом запуске? Поскольку он будет пропускать создание таблицы, так как он существует, и не будет вызывать ошибку. – Dresden

0

Причина в том, что вы пытаетесь вставить в таблицу двойную запись для столбца 'name1'. Скорее всего, вы вызываете эту команду внутри некоторого цикла, и данные, полученные от FB, содержат одно и то же имя страницы для нескольких результатов поиска. Возможно, вы также не удалили старую базу данных (с предыдущего запуска).

Вы можете попытаться отобразить или сохранить значения файла журнала, которые вы пытаетесь вставить в таблицу.

Правильным решением было бы создать внешний стол стола. Это должно быть как:

  1. соединение базы данных с открытым
  2. создать таблицу, если не существует
  3. четких записей из таблицы (во избежание дубликаты)
  4. начала цикла для FB запросов
  5. вставки записи в базу данных
  6. close loop
  7. закрыть соединение с базой данных
Смежные вопросы