Exportando datos de neo4j a csv en lugar de json

Estoy usando paquetes neo4jdb-python para consultar la base de datos Neo4j. Por ejemplo, considerando el siguiente código

 import neo4j connection = neo4j.connect("http://localhost:7474") cursor = connection.cursor() for i in cursor.execute("MATCH a RETURN a LIMIT 1"): print i 

Pero la salida es en forma de una tupla. es decir

 ({u'text': u'Stoyanov, S., Hoogveld, B., Kirschner, PA, (2010). Mapping Major Changes to Education and Training in 2025, in JRC Technical Note JRC59079., Publications Office of the European Union: Luxembourg.', u'identifier': u'reference/lak/226'},) 

¿Cómo obtengo la salida en formato csv? Esto es posible con la vista web de neo4j. y la salida es como,

 "{""text"":""Stoyanov, S., Hoogveld, B., Kirschner, PA, (2010). Mapping Major Changes to Education and Training in 2025, in JRC Technical Note JRC59079., Publications Office of the European Union: Luxembourg."",""identifier"":""reference/lak/226""}" 

Sin embargo, quiero hacerlo a través de un progtwig cliente, ya que necesito integrarlo en otro progtwig. Si no es posible con neo4jdb-python , entonces qué otras opciones están disponibles.

Ese CSV no proviene realmente de una API en particular, se está traduciendo al formato CSV en el lado del cliente.

El código apropiado está en exportable.coffee si desea echar un vistazo:

  $scope.exportCSV = (data) -> return unless data csv = new CSV.Serializer() csv.columns(data.columns()) for row in data.rows() csv.append(row) 

Y eso se refiere a CSV.coffee . Supongo que deberías poder hacer algo similar en Python, tal vez usando json.dumps como este:

 > import json > t = ({u'text': u'Stoyanov, S., Hoogveld, B., Kirschner, PA, (2010). Mapping Major Changes to Education and Training in 2025, in JRC Technical Note JRC59079., Publications Office of the European Union: Luxembourg.', u'identifier': u'reference/lak/226'},) > json.dumps(t) '[{"text": "Stoyanov, S., Hoogveld, B., Kirschner, PA, (2010). Mapping Major Changes to Education and Training in 2025, in JRC Technical Note JRC59079., Publications Office of the European Union: Luxembourg.", "identifier": "reference/lak/226"}]' 

El servidor Neo4j solo devuelve JSON, como Mark Needham menciona en su respuesta .

Por lo tanto, cualquier código para convertirlo a CSV debe estar en el lado del cliente. Esto se puede hacer usando el módulo csv . Tenga en cuenta que el paquete neo4jdb-python es compatible con Python2.7.

Un código mínimo para obtener los datos es

 import neo4j connection = neo4j.connect("http://localhost:7474") cursor = connection.cursor() data = list(cursor.execute("MATCH a RETURN a LIMIT 1") 

Tenga en cuenta que, como se menciona en la pregunta, los valores devueltos están en forma de tuplas. El código mínimo para crear el archivo csv es

 with open("test.csv","w") as csvfile: writer = csv.writer(csvfile,delimiter = ',',quotechar = '"',quoting = csv.QUOTE_ALL) writer.writerow(t[0].keys()) for i in t: writer.writerow(['{"%s":"%s"}'%(k,v) for k,v in i.iteritems()]) 

La explicación para el código es simple, abre un archivo. Usando csv.writer , crea un objeto writer . Escribe el encabezado primero usando writerow . Finalmente recorre el diccionario y escribe las filas.

La salida obtenida es

 "{""text"":""Stoyanov, S., Hoogveld, B., Kirschner, PA, (2010). Mapping Major Changes to Education and Training in 2025, in JRC Technical Note JRC59079., Publications Office of the European Union: Luxembourg.""}","{""identifier"":""reference/lak/226""}" 

que es similar a la obtenida usando el script exportable.coffee .