INSERT/DELETE/UPDATE query using SPARQLWrapper
The SPARQL queries are send as GET request, but the UPDATE (like INSERT, DELETE, etc.) requires the query be send as a POST request. Just add the following line before sparql.query()
sparql.method = 'POST'
Also, the url for update is different from the query. The update is based on workbench and not sesame url. For example, if the query url is:
http://localhost:8080/openrdf-sesame/repositories/test/
or
http://localhost:8080/openrdf-workbench/repositories/test/query
then the update url would be:
http://localhost:8080/openrdf-workbench/repositories/test/update
Therefore, the UPDATE/INSERT request should look like:
queryString = "INSERT DATA { GRAPH <http://example.com/> { "b" a "c". } }"
sparql = SPARQLWrapper("http://localhost:8080/openrdf-workbench/repositories/test/update")
sparql.setQuery(queryString)
sparql.method = 'POST'
sparql.query()
This is not particularly clear from the docs, but I think you can just execute an update statement in the same way that you execute a query:
queryString = "DELETE WHERE { ?s ?p ?o. }"
sparql = SPARQLWrapper("http://localhost:8080/openrdf-sesame/repositories/test/statements")
sparql.setQuery(queryString)
ret = sparql.query()
In the case of Sesame, one thing to keep in mind is that the URL for the update endpoint (repositories/<repId>/statements
) is not the same as the URL for the query endpoint (repositories/<repId>
). See the Sesame protocol docs for details.