Exporting query results — AllegroGraph Python client 104.2.0 documentation (original) (raw)

Example 9: Exporting query results

The previous example showed how to serialize statements to a file or a stream. It is also possible to perform a similar operation on the result of a query.

As usual, we’ll start by opening a connection:

from franz.openrdf.connect import ag_connect

conn = ag_connect("python-tutorial", create=True, clear=True)

and importing sample data - in this case containing birth and (when applicable) coronation dates of the sons of Henry II.

conn.addData(""" @prefix : ex:// . @prefix xsd: http://www.w3.org/2001/XMLSchema# .

:Henry :born "1155-02-28"^^xsd:date . :Richard :born "1157-09-08"^^xsd:date . :Geoffrey :born "1158-09-23"^^xsd:date . :John :born "1166-12-24"^^xsd:date .

:Henry :crowned "1170-06-14"^^xsd:date . # sort of... :Richard :crowned "1189-09-03"^^xsd:date . :John :crowned "1199-05-27"^^xsd:date .""")

Query results can be exported by passing a file name or a file-like object as the output parameter of the TupleQuery.evaluate()method of the query object. In this case we’ll want to print all kings born in or after 1156 from our dataset to standard output (we can useTrue as the file name to indicate stdout):

from franz.openrdf.query.query import QueryLanguage from franz.openrdf.rio.tupleformat import TupleFormat

query = conn.prepareTupleQuery( QueryLanguage.SPARQL, """ select ?name ?crowned { ?name ex://born ?birth . ?name ex://crowned ?crowned . filter(?birth >= "1156-01-01"^^xsd:date) . }""") query.evaluate(output=True, output_format=TupleFormat.CSV)

We can see that results are printed in the specified format:

name,crowned "ex://Richard","1189-09-03" "ex://John","1199-05-27"

We can export the result of a CREATE or DESCRIBE query in a similar fashion. The difference is that we need to supply anRDFFormat instead of a TupleFormat, since the result is a set of triples.

from franz.openrdf.rio.rdfformat import RDFFormat

query = conn.prepareGraphQuery( QueryLanguage.SPARQL, "describe ex://Richard where {}") query.evaluate(output=True, output_format=RDFFormat.NTRIPLES)

As expected, the result contains two triples:

ex://Richard ex://born "1157-09-08"^^http://www.w3.org/2001/XMLSchema#date . ex://Richard ex://crowned "1189-09-03"^^http://www.w3.org/2001/XMLSchema#date .

A file path can also be passed as the output argument:

import os import sys

query = conn.prepareTupleQuery( QueryLanguage.SPARQL, """ select ?name ?birth ?coronation { ?name ex://born ?birth ; ex://crowned ?coronation . }""") query.evaluate(output='example9.csv', output_format=TupleFormat.CSV) with open('example9.csv', 'r') as f: sys.stdout.write(f.read())

os.remove('example9.csv')

This outputs data read from the file:

name,birth,coronation "ex://Henry","1155-02-28","1170-06-14" "ex://Richard","1157-09-08","1189-09-03" "ex://John","1166-12-24","1199-05-27"