Python MySQL: inserte un registro si no existe en la tabla

Requisito previo: conectar la base de datos MySQL a Python

En este artículo, intentaremos insertar registros y verificar si EXISTE o no. La condición EXISTS en SQL se usa para verificar si el resultado de una consulta anidada correlacionada está vacío (no contiene tuplas) o no. Se puede usar para INSERTAR , SELECCIONAR, ACTUALIZAR o ELIMINAR declaraciones. 

La consulta que estamos usando el programa python es:

INSERTAR EN nombre-tabla(col1, col2, col3) \
   SELECCIONAR * DESDE (SELECCIONAR val1, val2, val3) como temp \
   DONDE NO EXISTE \
   (SELECCIONAR clave principal FROM nombre-tabla DONDE clave principal = registro insertado) LÍMITE 1

Supongamos que tenemos una base de datos llamada prueba y una tabla llamada geeksfoegeeks . A continuación se muestra el esquema y los datos de la tabla:

Base de datos

Dado que cada individuo tiene un número de identificación único, insertaremos registros y verificaremos el ID_NO de esa persona. Si ID_NO aún no está presente en la tabla, se insertará el registro; de lo contrario, se descartará. Entendamos usando los siguientes ejemplos:

Ejemplo 1: Cuando el registro no existe en la tabla.

Python3

# import required modules
import pymysql
  
  
# establish connection to MySQL
connection = pymysql.connect(
    # specify host name
    
    host="localhost",
      
    # specify username
    user="root",
      
    # enter password for above user
    password="1234",
      
    # default port number for MySQL is 3306
    port=3306,
      
    # specify database name
    db="test"
)
  
  
# make cursor for establish connection
mycursor = connection.cursor()
  
  
# display records before inserting
mycursor.execute("Select * from geeksfoegeeks")
myresult = mycursor.fetchall()
for i in myresult:
    print(i)
  
      
# statement to insert record
mycursor.execute(
    "Insert into geeksfoegeeks(name,address,age,mob_number,ID_NO) \
    select * from( Select 'Thomas','UK',30,1892345670,'IND100') as temp \
    where not exists \
    (Select ID_NO from geeksfoegeeks where ID_NO='IND100') LIMIT 1")
print("After inserting a record....")
  
  
# print records after insertion
mycursor.execute("Select * from geeksfoegeeks")
myresult = mycursor.fetchall()
for i in myresult:
    print(i)
mycursor.execute("Commit")
  
  
# close connection
connection.close()

Producción

Salida de Python después de la inerción

En el resultado anterior, pudimos ver que el registro (‘Thomas’,’UK’,30,1892345670,’IND100′) se insertó en la tabla MySQL.

Ejemplo 2: cuando el registro ya existe

A continuación se muestran el esquema y los datos de la tabla geeksdemo en la base de datos geek:

Ahora, intentaremos insertar un registro que ya existe. 

Python3

# import required modules
import pymysql
  
  
# establish connection to MySQL
connection = pymysql.connect(
    # specify host name
    host="localhost",
     
    # specify username
    user="root",
     
    # enter password for above user
    password="",
      
    # default port number for MySQL is 3306
    port=3306,
      
    # specify database name
    db="geek"
)
  
  
# make cursor for establish connection
mycursor = connection.cursor()
  
  
# display records before inserting
mycursor.execute("Select * from geeksdemo")
myresult = mycursor.fetchall()
for i in myresult:
    print(i)
      
      
# statement to insert record
mycursor.execute(
    "Insert into geeksdemo(id,name,gender,dept) \
    select * from( Select 5,'Thomas','m','information technology') as temp \
    where not exists \
    (Select id from geeksdemo where id=5) LIMIT 1")
print("After inserting a record....")
  
  
# print records after insertion
mycursor.execute("Select * from geeksdemo")
  
  
myresult = mycursor.fetchall()
for i in myresult:
    print(i)
mycursor.execute("Commit")
  
  
# close connection
connection.close()

Producción

Observamos que el registro (5,’Thomas’,’m’,’tecnología de la información’) no se insertó nuevamente en la tabla. La siguiente imagen es el resultado de la base de datos MySQL, después de ejecutar el script de Python anterior.

Podemos ver que 0 filas se vieron afectadas. Por lo tanto, no se insertó ningún registro porque ya existía en la tabla con otro registro.

Publicación traducida automáticamente

Artículo escrito por rohanchopra96 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *