7.7. SQLite3 Insert Constraints — Python
7.7.1. Unique
>>> import sqlite3 >>> >>> >>> DATABASE = ':memory:' >>> >>> SQL_CREATE_TABLE = """ ... CREATE TABLE IF NOT EXISTS astronauts ( ... id INTEGER PRIMARY KEY AUTOINCREMENT, ... login INTEGER UNIQUE, ... firstname TEXT, ... lastname TEXT);""" >>> >>> SQL_INSERT = """ ... INSERT INTO astronauts ... VALUES (NULL, :login, :firstname, :lastname);""" >>> >>> SQL_SELECT = """ ... SELECT * ... FROM astronauts;""" >>> >>> data = [ ... {'login': 'mwatney', 'firstname': 'Mark', 'lastname': 'Watney'}, ... {'login': 'mwatney', 'firstname': 'Melissa', 'lastname': 'Lewis'}, ... ] >>> >>> >>> with sqlite3.connect(DATABASE) as db: ... _ = db.execute(SQL_CREATE_TABLE) ... _ = db.executemany(SQL_INSERT, data) Traceback (most recent call last): sqlite3.IntegrityError: UNIQUE constraint failed: astronauts.login >>> >>> >>> with sqlite3.connect(DATABASE) as db: ... _ = db.execute(SQL_CREATE_TABLE) ... try: ... db.executemany(SQL_INSERT, data) ... except sqlite3.IntegrityError: ... print('Login need to be UNIQUE') Login need to be UNIQUE
7.7.2. Programming Error
>>> import sqlite3 >>> >>> >>> DATABASE = ':memory:' >>> >>> SQL_CREATE_TABLE = """ ... CREATE TABLE IF NOT EXISTS astronauts ( ... id INTEGER PRIMARY KEY AUTOINCREMENT, ... firstname TEXT, ... lastname TEXT);""" >>> >>> SQL_INSERT = """ ... INSERT INTO astronauts ... VALUES (NULL, ?, ?);""" >>> >>> >>> data = [ ... {'firstname': 'Mark', 'lastname': 'Watney'}, ... {'firstname': 'Melissa', 'lastname': 'Lewis'}, ... {'firstname': 'Rick', 'lastname': 'Martinez'}, ... {'firstname': 'Alex', 'lastname': 'Vogel'}, ... {'firstname': 'Beth', 'lastname': 'Johanssen'}, ... {'firstname': 'Chris', 'lastname': 'Beck'}, ... ] >>> >>> >>> with sqlite3.connect(DATABASE) as db: ... cursor = db.cursor() ... cursor.execute(SQL_CREATE_TABLE) ... cursor.executemany(SQL_INSERT, data) Traceback (most recent call last): sqlite3.ProgrammingError: Binding 1 has no name, but you supplied a dictionary (which has only names).
7.7.3. Operational Error
>>> import sqlite3 >>> >>> >>> DATABASE = ':memory:' >>> >>> SQL_CREATE_TABLE = """ ... CREATE TABLE IF NOT EXISTS astronauts ( ... id INTEGER PRIMARY KEY AUTOINCREMENT, ... firstname TEXT, ... lastname TEXT);""" >>> >>> SQL_CREATE_INDEX = """ ... CREATE INDEX ... IF NOT EXISTS ... astronauts_lastname_index ... ON astronaut (lastname);""" >>> >>> >>> with sqlite3.connect(DATABASE) as db: ... db.execute(SQL_CREATE_TABLE) ... db.execute(SQL_CREATE_INDEX) Traceback (most recent call last): sqlite3.OperationalError: no such table: main.astronaut