Базовый пример PySQLite? - PullRequest
       7

Базовый пример PySQLite?

6 голосов
/ 10 апреля 2011

Gang, я начинаю играть с pySQLite, и я пытаюсь найти пример, который иллюстрирует, как запросить базу данных для существующих записей перед вставкой новой записи, если она еще не существует в базе данных.Я чувствую, что пропускаю очень основную функцию.

Спасибо!

1 Ответ

11 голосов
/ 10 апреля 2011

Используйте ключевое слово 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))''')

Вот ссылки на информацию по

  1. ВСТАВИТЬ ИЛИ ИГНОРИРОВАТЬ
  2. УНИКАЛЬНЫЕ ограничения
...