Проблема с запросами, переплетами Redland и Python
Вопрос
Я разрабатываю семантический обратный прокси, который извлекает метаданные. Я использую Django, DJ-Revproxy и Rdflib (и для хранения, которое я использую MySQL), но я переключаюсь на структуру Редленда с привязками Python для управления семантической частью.
Но у меня есть важная проблема. После хранения RDF (данные находятся в базе данных MySQL, я проверил), я хочу сделать запрос SPARQL, и результат - «нет». Может быть, метод для запросов плохо реализован.
def sparql_query(query, user, password, db, output, dbSystem='mysql'):
if dbSystem == 'mysql':
st= connect_librdf_mysql(user, password, db)
else:
st= connect_librdf_sqlite(db)
options = 'database=\'' + db + '\''
model=RDF.Model(st, options_string=options)
q1 = RDF.Query(query ,query_language='sparql')
#q1Result = q1.execute(model)
q1Result = model.execute(q1)
print("[ SPARQL QUERY DONE ]")
if q1Result.is_graph():
return q1Result.as_stream()
else:
return str(q1Result)
Результат такова:
slok@sLoKAsus:utils$ python ./test_redland.py
[ CONNETED TO redland2 DATABASE ]
[ RDF STORED ]
[ CONNETED TO redland2 DATABASE ]
[ SPARQL QUERY DONE ]
<?xml version="1.0" encoding="utf-8"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
<head>
<variable name="aname"/>
<variable name="bname"/>
</head>
<results>
</results>
</sparql>
Спасибо :)
Решение
Я нашел эту проблему после обновления до версии GIT All Redland Libs (Raptor, Rasqal ...). Проблема заключается в том, когда я подключаюсь к базе данных MySQL, новое = истинное руины все сохраненные данные (данные остаются там, но запросы являются нулевыми).
Другими словами, чтобы решить проблему, вы должны обновить LIBS, а затем в первый раз, когда вы подключите (или создаете) схему MySQL (DB), поставите новый флаг к True, а затем всегда флаг к False. Я поместил здесь код в некоторые функции, которые я сделал: Гист из MySQL и Redland пример