2011-04-10 26 views
6

Pandilla, estoy empezando a jugar con pySQLite y estoy tratando de encontrar un ejemplo que ilustre cómo consultar el archivo db para los registros existentes antes de insertar un nuevo registro si aún no existe en el archivo db. Siento que estoy pasando por alto una función muy básica.Ejemplo básico de pySQLite?

Gracias!

Respuesta

11

utilizar la palabra clave UNIQUE al crear la tabla, y el uso INSERT OR INGORE para insertar sólo si el registro es "nuevo" (única):

connection=sqlite3.connect(':memory:') 
cursor=connection.cursor() 
cursor.execute('CREATE TABLE foo (bar INTEGER UNIQUE, baz INTEGER)') 

Aquí insertamos la fila vez:

cursor.execute('INSERT INTO foo (bar,baz) VALUES (?, ?)',(1,2)) 

intentar insertar la fila de nuevo falla:

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 inserta el registro sólo si UNIQUE restricción se pasa:

cursor.execute('INSERT OR IGNORE INTO foo (bar,baz) VALUES (?, ?)',(1,3)) 

cursor.execute('SELECT * from foo') 
data=cursor.fetchall() 
print(data) 
# [(1, 2)]  

para crear un índice UNIQUE en múltiples campos, usar algo como

cursor.execute(''' 
    CREATE TABLE foo (bar INTEGER, baz INTEGER, bing INTEGER, UNIQUE (bar, baz))''') 

Aquí hay enlaces a información sobre

  1. INSERT OR IGNORE
  2. UNIQUE constraints