Используйте ключевое слово UNIQUE
при создании таблицы и используйте INSERT OR INGORE
для вставки, только если запись «новая» (уникальная):
connection=sqlite3.connect(':memory:')
cursor=connection.cursor()
cursor.execute('CREATE TABLE foo (bar INTEGER UNIQUE, baz INTEGER)')
Здесь мы вставляем строку один раз:
cursor.execute('INSERT INTO foo (bar,baz) VALUES (?, ?)',(1,2))
Попытка вставить строку снова не удалась:
try:
cursor.execute('INSERT INTO foo (bar,baz) VALUES (?, ?)',(1,2))
except sqlite3.IntegrityError as err:
print(err)
# sqlite3.IntegrityError: column bar is not unique
INSERT OR IGNORE
вставляет запись, только если передано ограничение UNIQUE
:
cursor.execute('INSERT OR IGNORE INTO foo (bar,baz) VALUES (?, ?)',(1,3))
cursor.execute('SELECT * from foo')
data=cursor.fetchall()
print(data)
# [(1, 2)]
Чтобы создать индекс UNIQUE
для нескольких полей, используйте что-то вроде
cursor.execute('''
CREATE TABLE foo (bar INTEGER, baz INTEGER, bing INTEGER, UNIQUE (bar, baz))''')
Вот ссылки на информацию по
- ВСТАВИТЬ ИЛИ ИГНОРИРОВАТЬ
- УНИКАЛЬНЫЕ ограничения