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.

Python: Cadenas de texto multilínea con variables en línea.

Estoy intentando usar variables en línea en la cadena de varias líneas para formar una consulta GraphQL.

query = '''query {
gapc {
    search_gapc_parts(part_number: "{}", query: "{}" limit: 1) {
    items {
        gapc_attributes {
        name
        value
        }

        weight_g
        length_mm
        height_mm
        weight_g
    }
    }
}
}'''.format(p_code, m_name)

En lugar de “xxx” y “XXX”, quiero usar las variables “p_code” y “m_name” de esta manera:

query = '''query {
gapc {
    search_gapc_parts(part_number: "{}", query: "{}" limit: 1) {
    items {
        gapc_attributes {
        name
        value
        }

        weight_g
        length_mm
        height_mm
        weight_g
    }
    }
}
}'''.format(p_code, m_name)

El terminal muestra este error:

Traceback (most recent call last):
  File "c:\Users\aguli\Рабочий стол\partly feature import\test.py", line 24, in <module>
    }}'.format(p_code, m_name)
ValueError: unexpected '{' in field name

He intentado varios métodos de variables en línea, pero aparece el mismo error.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema con el código es que las llaves {} utilizadas para las variables en línea en la cadena de varias líneas también se utilizan en las consultas de GraphQL como marcadores de posición para variables. Esto está causando un conflicto, ya que el intérprete no puede diferenciar entre los dos usos de las llaves.

    Para resolver este problema, puedes usar la función format_map() en lugar de format(). Esta función toma un diccionario como argumento y reemplaza las llaves con las claves correspondientes en el diccionario.

    Aquí tienes un ejemplo de código que utiliza format_map() para reemplazar los marcadores de posición con los valores de p_code y m_name:

    query_template = '''
    query {{
      gapc {{
        search_gapc_parts(part_number: "{part_number}", query: "{query}", limit: 1) {{
          items {{
            gapc_attributes {{
              name
              value
            }}
            weight_g
            length_mm
            height_mm
            weight_g
          }}
        }}
      }}
    }}
    '''
    
    p_code = "xxx"
    m_name = "XXX"
    
    query = query_template.format_map({"part_number": p_code, "query": m_name})
    
    print(query)
    

    En este código, primero definimos la plantilla de consulta como una cadena de varias líneas con marcadores de posición. Luego, creamos un diccionario con claves correspondientes a los marcadores de posición y valores correspondientes a las variables que queremos sustituir. Finalmente, utilizamos la función format_map() para reemplazar los marcadores de posición en la plantilla con los valores del diccionario.

    Este código debería producir una consulta válida de GraphQL con las variables sustituidas.

Comments are closed.