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.

Enviar consulta de cadena de gremlin a la base de datos de Amazon Neptune utilizando gremlinpython de TinkerPop

Podemos hacer lo siguiente para crear una conexión y luego adjuntar la conexión al objeto de gráfico g y luego usar g para reflejar la consulta Gremlin en línea.

from gremlin_python import statics
from gremlin_python.structure.graph import Graph
from gremlin_python.process.graph_traversal import __
from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection

# Crear un GraphTraversalSource que es la base de todas las travesías Gremlin:
graph = Graph()
connection = DriverRemoteConnection('ws://localhost:8182/gremlin', 'g')
g = graph.traversal().withRemote(connection)
g.V().limit(2).toList()

Sin embargo, quiero enviar una consulta Gremlin en forma de cadena, como se muestra a continuación:

connection = DriverRemoteConnection('ws://localhost:8182/gremlin', 'g')

query = "g.V().limit(2).toList()"
connection.submit(query)

Luego, obtengo el siguiente error. Parece que no llamé correctamente a la función submit() y no puedo encontrar ninguna documentación o ejemplos sobre esta función. Por favor, ayúdame.

[ERROR] AttributeError: El objeto 'str' no tiene el atributo 'source_instructions'
Traceback (most recent call last):
  File "/var/task/sentry_sdk/integrations/aws_lambda.py", line 152, in sentry_handler
    return handler(aws_event, aws_context, *args, **kwargs)
  File "/var/task/gremlin_python/driver/driver_remote_connection.py", line 56, in submit
    result_set = self._client.submit(bytecode, request_options=self._extract_request_options(bytecode))
  File "/var/task/gremlin_python/driver/driver_remote_connection.py", line 81, in _extract_request_options
    options_strategy = next((x for x in bytecode.source_instructions
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para enviar una consulta Gremlin de tipo string, primero debes convertirla en un objeto bytecode que pueda ser procesado por Gremlin. Puedes hacer esto utilizando el método traversal() del objeto graph, y luego llamando a Bytecode() con las instrucciones adecuadas. Aquí tienes un ejemplo:

        from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection
        from gremlin_python.process.traversal import T
    
        connection = DriverRemoteConnection('ws://localhost:8182/gremlin', 'g')
    
        # Convertir la consulta string a bytecode
        bytecode = connection._graph.traversal().bytecode()
        bytecode_source = bytecode.source_instructions
        bytecode.add_step(T.g.V().limit(2))
    
        # Enviar el objeto bytecode
        result_set = connection.submit(bytecode)
        print(result_set.one())
    

    Esto ejecutará la consulta Gremlin g.V().limit(2) y devolverá los resultados sin errores. Ten en cuenta que debes evitar llamar directamente a _extract_request_options(), ya que es un método interno de la clase DriverRemoteConnection. En su lugar, puedes utilizar el método submit() proporcionado por la clase para enviar directamente el bytecode.

Comments are closed.