Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

506
Visualizações
SqlAlchemy: consulta para encontrar elementos json que comienzan con una subcadena dentro de una matriz

Tengo un objeto json complejo guardado en una base de datos postgresql y quiero encontrar todas las entradas que contienen o comienzan con una subcadena dentro de una matriz. El objeto json:

 "configurations" : { "CVE_data_version" : "4.0", "nodes" : [ { "operator" : "OR", "cpe_match" : [ { "vulnerable" : true, "cpe23Uri" : "cpe:2.3:a:apache:http_server:*:*:*:*:*:*:*:*", "versionStartIncluding" : "2.4.0", "versionEndIncluding" : "2.4.41" } ] } ] }

Más específicamente, quiero encontrar todos los objetos que comienzan con: "cpe:2.3:a:apache" en el campo "cpe23Uri".

Consulta que he hecho:

 session.query(cvemodel.data['configurations']['nodes'][0]['cpe_match'].contains([{'cpe23Uri': 'cpe:2.3:a:apache:http_server:*:*:*:*:*:*:*:*'}])).all()

El problema con esta consulta es que coincide con la palabra completa. Si pongo esto:

 session.query(cvemodel.data['configurations']['nodes'][0]['cpe_match'].contains([{'cpe23Uri': 'cpe:2.3:a:apache:http_server'}])).first()

¡No devuelve nada!

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Si usa PostgreSQL 12 o posterior, puede usar jsonb_path_exists() y amigos:

 needle = 'cpe:2.3:a:apache:http_server' session.query(cvemodel).\ filter(func.jsonb_path_exists( cvemodel.data, '''$.configurations.nodes[0].cpe_match[*].cpe23Uri ? (@ starts with $needle)''', json.dumps({"needle": needle}))).\ all()

Si desea verificar si cpe23Uri contiene la aguja, puede usar el predicado like_regex , especialmente si tiene una "aguja" estática; desafortunadamente like_regex solo acepta cadenas literales como operando derecho. Otra opción para una consulta "contiene" sería extraer el cpe23Uri usando jsonb_path_query() o accesores y jsonb_array_elements() y usar LIKE tradicional, como se describe aquí .

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda