Saltar al contenido

Convertir Consultas MySQL a JSON en Python: Trucos y Técnicas para Optimizar tu Código

Consultas de mysql a JSON son posibles desde la versión 8 de MySQL y desde esta podemos guardar, modificar y eliminar datos en formato JSON. Para esto tenemos que tomar en cuenta mysql 8 cuenta el tipo de dato JSON el cual tenemos disponible en nuestra version de mysql.

como sabemos desde que iniciamos con mongodb y las base de datos NoSql hemos visto como estos datos son mas rapidos y flexibles de manipular que una base datos tracidional. Por lo cual mysql a implementado este tipo de datos.

Índice

    Consultar un Json desde mysql con workbench

    JSON_EXTRACT es una función de MySQL que permite extraer un valor de un objeto JSON.

    La sintaxis es la siguiente:

    JSON_EXTRACT(json_expression, path)

    Donde json_expression es la expresión JSON que deseas evaluar y path es una ruta que indica el camino para acceder al valor deseado dentro del objeto JSON.

    Por ejemplo, si tienes una columna llamada data que contiene un objeto JSON de la siguiente manera:

    {
        "name": "John Doe",
        "age": 30,
        "email": "john.doe@example.com"
    }

    Puedes extraer el valor del campo name con la siguiente consulta:

    SELECT JSON_EXTRACT(data, "$.name") AS name FROM tabla;
    

    Y esto te devolverá una columna llamada name con el valor «John Doe».

    Ejemplo visual de como leer un Json desde mysql y workbench

    Json desde mysql  como se leer desde workbench

    Como actualizar un columna json desde mysql ?

    Es cierto que ya sabemos consultar JSON de una columna , pero como hacemos para actualizar con la funcion JSON_REPLACE MySQL permite reemplazar un valor en un objeto JSON .

    La sintaxis es la siguiente:

    JSON_REPLACE(json_expression, path, new_value)
    

    Donde json_expression es la expresión JSON que deseas evaluar, path es una ruta que indica el camino para acceder al valor que deseas reemplazar dentro del objeto JSON, y new_value es el nuevo valor que deseas insertar en el objeto JSON .

    Por ejemplo, si tienes una columna llamada data que contiene un objeto JSON de la siguiente manera:

    {
        "name": "John Doe",
        "age": 30,
        "email": "john.doe@example.com"
    }

    Puedes reemplazar el valor del campo name con la siguiente consulta:

    UPDATE tabla SET data = JSON_REPLACE(data, "$.name", "Jane Doe");

    Y esto cambiará el valor de la columna data a:

    {
        "name": "Jane Doe",
        "age": 30,
        "email": "john.doe@example.com"
    }

    Eliminar un valor en un objeto JSON

    Al igual que cualquier otra base de datos NOSql pedemos elimanar valores de un artchivo JSON . Para esto usamos la función JSON_REMOVE de MySQL que permite eliminar un valor en un objeto JSON. La

    Sintaxis es la siguiente:

    JSON_REMOVE(json_expression, path)

    Donde json_expression es la expresión JSON que deseas evaluar, y path es una ruta que indica el camino para acceder al valor que deseas eliminar dentro del objeto JSON.

    Por ejemplo, si tienes una columna llamada data que contiene un objeto JSON de la siguiente manera:

    {
        "name": "John Doe",
        "age": 30,
        "email": "john.doe@example.com"
    }

    Puedes eliminar el valor del campo email con la siguiente consulta:

    UPDATE tabla SET data = JSON_REMOVE(data, "$.email");

    Y esto cambiará el valor de la columna data a:

    {
        "name": "John Doe",
        "age": 30
    }

    Como importar archivo JSON a Mysql en PYTHON?

    A diferencia de PostgreSQL con el comando \copy o de Sql Server con el openrowset en MySQL no cuenta con una funcion nativa para importar archivos json por lo cual debemos recurrir a PHP o Python para los fines de importar y guardar un archivo JSON en mysql.

    Aqui te dejo un ejemplo de como funcionaria en PYTHON

    Puedes leer un archivo JSON en Python y convertirlo en un objeto utilizable con la función json.load. Aquí hay un ejemplo:

    import json
    
    # Leer el contenido del archivo JSON
    with open("archivo.json", "r") as f:
        obj = json.load(f)
    
    # Acceder a los valores del objeto
    print(obj["campo1"])
    print(obj["campo2"])
    
    # O si es una lista de objetos
    for item in obj:
        print(item["campo1"])
        print(item["campo2"])
    

    Una vez que tienes el objeto en formato PHYTON, puedes manipularlo y acceder a los valores de la misma manera que con cualquier otro objeto en PHYTON. Luego, puedes insertar los datos en una tabla de MySQL utilizando la librería mysql.connector o pymysql.

    Aquí hay un ejemplo utilizando pymysql en PYThON:

    import pymysql
    
    # Conectarse a la base de datos
    conn = pymysql.connect(host="host", user="username", password="password", database="database")
    
    # Crear un cursor
    cursor = conn.cursor()
    
    # Insertar los datos en la tabla
    for item in obj:
        cursor.execute("INSERT INTO tabla (campo1, campo2) VALUES (%s, %s)", 
                       (item["campo1"], item["campo2"]))
    
    # Guardar los cambios
    conn.commit()
    
    # Cerrar la conexión
    conn.close()</code>

    Como guardar un json en una columna de mysql en php

    Al igual que extraer de un archivo es posible que lo que estes recibiendo de una API sea un JSON para que puedas guardarlo. para este caso te muestro como guadar un json en la tabla de tu base de datos. Aunque aqui se utiliza un INSERT sql podemos crear un procedimiento de mysql para que pueda recibir esta información.

    Para guardar un objeto JSON en una columna de una tabla en MySQL, debes especificar el tipo de datos JSON para la columna.

    Por ejemplo, puedes crear una tabla personas con una columna data que almacene objetos JSON de la siguiente manera:

    CREATE TABLE personas (
      id INT AUTO_INCREMENT PRIMARY KEY,
      data JSON
    );

    Después puedes insertar objetos JSON en la columna data de la siguiente manera:

    INSERT INTO personas (data) 
    VALUES ('{ "name": "John Doe", "age": 30, "email": "john.doe@example.com" }');
    

    Puedes consultar los datos almacenados en la tabla personas con una consulta como la siguiente:

    SELECT * FROM personas;

    Y obtendrás un resultado similar a:

    +----+----------------------------------------+
    | id | data                                   |
    +----+-------------------------------------------------------------------+
    |  1 | {"name": "John Doe", "age": 30, "email": "john.doe@example.com"} |
    +----+--------------------------------------------------------------------+

    Como Filtrar un Json desde mysql ?

    Puedes utilizar la función JSON_EXTRACT en una cláusula WHERE de una consulta de MySQL para filtrar registros basados en el contenido de una columna que almacena objetos JSON.

    Por ejemplo, supongamos que tienes una tabla personas con una columna data que almacena objetos JSON como el siguiente:

    +----+----------------------------------------+
    | id | data                                   |
    +----+----------------------------------------+
    |  1 | {"name": "John Doe", "age": 30, "email": "john.doe@example.com"} |
    |  2 | {"name": "Jane Doe", "age": 25, "email": "jane.doe@example.com"} |
    +----+----------------------------------------+
    

    Puedes consultar todas las personas con una edad de 30 años o más con la siguiente consulta:

    SELECT * FROM  persona WHERE JSON_EXTRACT(data, "$.age") &gt;= 30;

    Y obtendrás un resultado similar a:

    +----+----------------------------------------+
    | id | data                                   |
    +----+-------------------------------------------------------------------+
    |  1 | {"name": "John Doe", "age": 30, "email": "john.doe@example.com"} |
    +----+-------------------------------------------------------------------+
    

    En este ejemplo, la función JSON_EXTRACT extrae el valor del campo age del objeto JSON almacenado en la columna data y lo compara con 30 en la cláusula WHERE.

    De igual forma podemos usar la Cláusula Order by o Inner Join de sql siempre que tomemos en cuenta la función JSON_EXTRACT.

    load_file para cargar un Json

    El comando LOAD_FILE en MySQL es utilizado para cargar un archivo en una columna de tipo BLOB o TEXT. No es posible usar LOAD_FILE directamente para leer un archivo JSON y almacenarlo en una columna de tipo JSON.

    Para leer un archivo JSON y almacenarlo en una columna de tipo JSON en MySQL, debes leer el archivo en un lenguaje de programación, parsear el contenido del archivo JSON y luego insertar el objeto JSON parseado en la columna correspondiente en la tabla de MySQL.

    Otra forma de hacer es crear un cursor de mysql para poder pocesar el archivo cargado en la columna la cual puedes usar una tabla temporal esta practica puede crear un alto impaco den la memoria de tu servidor por lo cual te dejo un codigo para hacerlo desde python.

    Por ejemplo, en Python puedes leer un archivo JSON y insertarlo en una columna de tipo JSON en MySQL de la siguiente manera:

    import json
    import mysql.connector
    
    # Conectar a la base de datos de MySQL
    cnx = mysql.connector.connect(user='user', password='password', host='host', database='database')
    cursor = cnx.cursor()
    
    # Leer el archivo JSON
    with open('data.json', 'r') as f:
        data = json.load(f)
    
    # Insertar el objeto JSON en la tabla
    query = "INSERT INTO personas (data) VALUES (%s)"
    cursor.execute(query, (json.dumps(data),))
    
    # Guardar los cambios
    cnx.commit()
    
    # Cerrar la conexión a la base de datos
    cnx.close()
    

    En este ejemplo, se abre el archivo JSON con la función open, se parsea el contenido del archivo con la función json.load y se inserta el objeto parseado en la tabla de MySQL con la función cursor.execute.

    Codigo para importar json en python

    Codigo para importar json en python

    Conclusion

    las última version de MySQL podemos tener datos almacenados en formato de documentos como exactamente igual que en base de datos NoSQL pero con todos los beneficios que ya usamos y conocemos. Con el tipo de datos NOSQL mysql entra en compentencia con las base de datos documentales.

    Recursos importantes

    Guia oficial de python

    Udemy curso oficial de json

    Mejores guias para aprender Mysql

    Comentanos si te funciono hasta la proxima!!

    Gracias :D!!