Transacciones ACID (Insert/ Update / Delete) en SQLite3 — 6:46 min

  • 6:46 min | Última modificación: Octubre 14, 2021 | YouTube

El lenguaje SQL estándar provee directivas para la insertar, actualizar y borrar registros en una tabla. En este tutorial se presentan ejemplos representativos de estas instrucciones en SQLlite3.

[1]:
#
# Apertura de la conexión
#
import sqlite3

conn = sqlite3.connect(":memory:")  ## aca se indica el nombre de la db.
cur = conn.cursor()

Creación de la tabla

[2]:
cur.execute(
    """
CREATE TABLE persons (
    id INT,
    firstname VARCHAR(10),
    surname VARCHAR(10),
    birthday DATE,
    color VARCHAR(10),
    quantity INT
);
"""
).fetchall()
[2]:
[]

INSERT

INSERT [INTO] tbl_name [(column_name,...)]
{VALUES | VALUE}
({expression|DEFAULT},...)[,(...),...];
[3]:
#
# Inserta el registro en la tabla.
# Los valores están en el mismo orden de los campos.
#
cur.execute(
    """
INSERT INTO
    persons
VALUES
    (1,"Vivian","Hamilton","1971-07-08","green",1);
"""
).fetchall()

cur.execute("SELECT * FROM persons;").fetchall()
[3]:
[(1, 'Vivian', 'Hamilton', '1971-07-08', 'green', 1)]
[4]:
#
# Inserta varios registros a la vez.
# Los valores deben estar en el mismo orden de los campos.
#
cur.execute(
    """
INSERT INTO
    persons
VALUES
    (2,"Karen","Holcomb","1974-05-23","green",4),
    (3,"Cody","Garrett","1973-04-22","orange",1);
"""
).fetchall()

cur.execute("SELECT * FROM persons;").fetchall()
[4]:
[(1, 'Vivian', 'Hamilton', '1971-07-08', 'green', 1),
 (2, 'Karen', 'Holcomb', '1974-05-23', 'green', 4),
 (3, 'Cody', 'Garrett', '1973-04-22', 'orange', 1)]
[5]:
#
# Inserta registros con información parcial.
# Se indica en cuales campos se inserta la información.
#
cur.execute(
    """
INSERT INTO persons (color,firstname,surname) VALUES
    ("violet","Vivian", "Kinney"),
    ("blue","Hope","Kingston"),
    ("red","Kylan","Bigelow");
"""
).fetchall()

cur.execute("SELECT * FROM persons;").fetchall()
[5]:
[(1, 'Vivian', 'Hamilton', '1971-07-08', 'green', 1),
 (2, 'Karen', 'Holcomb', '1974-05-23', 'green', 4),
 (3, 'Cody', 'Garrett', '1973-04-22', 'orange', 1),
 (None, 'Vivian', 'Kinney', None, 'violet', None),
 (None, 'Hope', 'Kingston', None, 'blue', None),
 (None, 'Kylan', 'Bigelow', None, 'red', None)]
[6]:
#
# Inserta un registro con información en un solo campo.
# Se indica en cual campo se inserta la información
#
cur.execute(
    """
INSERT INTO
    persons (firstname)
VALUES
    ("Camil");
"""
).fetchall()

cur.execute("SELECT * FROM persons;").fetchall()
[6]:
[(1, 'Vivian', 'Hamilton', '1971-07-08', 'green', 1),
 (2, 'Karen', 'Holcomb', '1974-05-23', 'green', 4),
 (3, 'Cody', 'Garrett', '1973-04-22', 'orange', 1),
 (None, 'Vivian', 'Kinney', None, 'violet', None),
 (None, 'Hope', 'Kingston', None, 'blue', None),
 (None, 'Kylan', 'Bigelow', None, 'red', None),
 (None, 'Camil', None, None, None, None)]
[7]:
#
# Se inserta información en un registro.
# No se indican los nombres de los campos.
# Se usa NULL para los campos que no tienen información.
#
cur.execute(
    """
INSERT INTO
    persons
VALUES
    (NULL,"Kate","Bond","1974-05-23",NULL,NULL);
"""
).fetchall()

cur.execute("SELECT * FROM persons;").fetchall()
[7]:
[(1, 'Vivian', 'Hamilton', '1971-07-08', 'green', 1),
 (2, 'Karen', 'Holcomb', '1974-05-23', 'green', 4),
 (3, 'Cody', 'Garrett', '1973-04-22', 'orange', 1),
 (None, 'Vivian', 'Kinney', None, 'violet', None),
 (None, 'Hope', 'Kingston', None, 'blue', None),
 (None, 'Kylan', 'Bigelow', None, 'red', None),
 (None, 'Camil', None, None, None, None),
 (None, 'Kate', 'Bond', '1974-05-23', None, None)]

UPDATE

UPDATE tbl_name
(SET col_name={expression|DEFAULT}, ...)
[WHERE where_conditions];
[8]:
#
# Se actualiza la información de los campos de registros existentes.
# Se indica explictamente el valor de cada campo.
# Si no se introduce la clausura WHERE se cambian todos los
# los registros de la tabla.
#
#
# Se inserta información en un registro.
# No se indican los nombres de los campos.
# Se usa NULL para los campos que no tienen información.
#
cur.execute(
    """
UPDATE persons SET
    id = 8,
    color = "gray"
WHERE
    firstname = "Kate";
"""
).fetchall()

cur.execute("SELECT * FROM persons;").fetchall()
[8]:
[(1, 'Vivian', 'Hamilton', '1971-07-08', 'green', 1),
 (2, 'Karen', 'Holcomb', '1974-05-23', 'green', 4),
 (3, 'Cody', 'Garrett', '1973-04-22', 'orange', 1),
 (None, 'Vivian', 'Kinney', None, 'violet', None),
 (None, 'Hope', 'Kingston', None, 'blue', None),
 (None, 'Kylan', 'Bigelow', None, 'red', None),
 (None, 'Camil', None, None, None, None),
 (8, 'Kate', 'Bond', '1974-05-23', 'gray', None)]
[9]:
#
# Se actualiza el campo con base en el indicador.
#
cur.execute(
    """
UPDATE
    persons
SET
   color = "black"
WHERE
   id = 8;
"""
).fetchall()

cur.execute("SELECT * FROM persons;").fetchall()
[9]:
[(1, 'Vivian', 'Hamilton', '1971-07-08', 'green', 1),
 (2, 'Karen', 'Holcomb', '1974-05-23', 'green', 4),
 (3, 'Cody', 'Garrett', '1973-04-22', 'orange', 1),
 (None, 'Vivian', 'Kinney', None, 'violet', None),
 (None, 'Hope', 'Kingston', None, 'blue', None),
 (None, 'Kylan', 'Bigelow', None, 'red', None),
 (None, 'Camil', None, None, None, None),
 (8, 'Kate', 'Bond', '1974-05-23', 'black', None)]

DELETE

[10]:
cur.execute(
    """
DELETE FROM
    persons
WHERE
   color = 'green';
"""
).fetchall()

cur.execute("SELECT * FROM persons;").fetchall()
[10]:
[(3, 'Cody', 'Garrett', '1973-04-22', 'orange', 1),
 (None, 'Vivian', 'Kinney', None, 'violet', None),
 (None, 'Hope', 'Kingston', None, 'blue', None),
 (None, 'Kylan', 'Bigelow', None, 'red', None),
 (None, 'Camil', None, None, None, None),
 (8, 'Kate', 'Bond', '1974-05-23', 'black', None)]