es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Puedo importar una tabla en la validación de un esquema JSON?

Estoy escribiendo una validación de esquema JSON. Tengo un campo ID cuyos valores se importan de una tabla en SQL Server. Estos valores son grandes y se actualizan con frecuencia, por lo que me pregunto si hay alguna forma de conectarse dinámicamente a esta tabla en el servidor y validar el JSON. A continuación se muestra un ejemplo del código de mi esquema:

{
  "type": "object",
  "required": ["employees"],
  "properties": {
    "employees": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": { "type": "integer", "enum": [134,2123,3213,444,5525,6234,7532,825,9342]}
        }
      }
    }
  }
}

En lugar de ‘enum’, quiero conectarme a una tabla para que los valores de ID se actualicen cuando la tabla se actualice.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible conectarse de forma dinámica a una tabla en SQL Server y validar los valores del campo ID en su esquema JSON. Una forma de lograr esto es utilizando la biblioteca python-jsonschema que le permite definir validadores personalizados.

    En primer lugar, necesitaría establecer una conexión con la base de datos de SQL Server utilizando una biblioteca de cliente de base de datos como pyodbc o pymssql. Luego, puede ejecutar una consulta para recuperar los valores ID de la tabla y almacenarlos en una lista o diccionario.

    A continuación, puede definir una función validadora personalizada que verifique si el valor ID en el objeto JSON está presente en la lista o diccionario recuperado de la base de datos. Puede usar la función jsonschema.validators.create para crear un nuevo objeto validador y especificar su función validadora personalizada como la función de verificación para la propiedad “id”.

    Aquí hay un ejemplo de fragmento de código que muestra cómo hacer esto:

    import jsonschema
    import pyodbc
    
    # Definir el esquema JSON
    schema = {
      "type": "object",
      "required": ["employees"],
      "properties": {
        "employees": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": { "type": "integer" }
            }
          }
        }
      }
    }
    
    # Conectarse a la base de datos de SQL Server
    conn = pyodbc.connect('DRIVER={SQL Server};SERVER=nombre_servidor;DATABASE=nombre_bd;UID=nombre_usuario;PWD=contraseña')
    
    # Ejecutar una consulta para recuperar los valores ID de la tabla
    cursor = conn.cursor()
    cursor.execute('SELECT id FROM mi_tabla')
    id_values = [row[0] for row in cursor.fetchall()]
    
    # Definir la función validadora personalizada
    def validate_id(validator, id_value, instance, schema):
        if id_value not in id_values:
            yield jsonschema.ValidationError('Valor ID inválido: {}'.format(id_value))
    
    # Crear un nuevo objeto validador con la función validadora personalizada
    MyValidator = jsonschema.validators.create(schema, validators={'id': validate_id})
    
    # Validar un objeto JSON utilizando el validador personalizado
    my_json = {...} # el objeto JSON a validar
    MyValidator.validate(my_json)
    

    En el código anterior, la función validate_id verifica si el valor ID en la instancia (el objeto JSON que se está validando) está presente en la lista id_values recuperada de la base de datos. Si el valor no se encuentra, se genera un ValidationError con un mensaje de error personalizado.

    La función create se utiliza para crear un nuevo objeto validador de esquema JSON con el esquema y las funciones validadoras proporcionadas. El diccionario validators especifica la función de verificación para la propiedad “id”.

    Finalmente, el objeto MyValidator se utiliza para validar un objeto JSON (my_json en este caso) utilizando el método validate.

    Tenga en cuenta que es posible que deba considerar el almacenamiento en caché de los valores ID para mejorar el rendimiento y reducir las consultas a la base de datos. Además, asegúrese de manejar cualquier error de base de datos que pueda ocurrir al ejecutar consultas.

Comments are closed.