Python rdflib图未更新。为什么?

Python rdflib图未更新。为什么?,python,rdf,rdflib,Python,Rdf,Rdflib,我试图理解这种行为。这绝对不是我所期望的。我有两个程序,一个读写器。读取器打开一个RDFlib图形存储,然后每2秒执行一次查询 import rdflib import random from rdflib import store import time default_graph_uri = "urn:uuid:a19f9b78-cc43-4866-b9a1-4b009fe91f52" s = rdflib.plugin.get('MySQL', store.Store)('rdfsto

我试图理解这种行为。这绝对不是我所期望的。我有两个程序,一个读写器。读取器打开一个RDFlib图形存储,然后每2秒执行一次查询

import rdflib
import random
from rdflib import store
import time

default_graph_uri = "urn:uuid:a19f9b78-cc43-4866-b9a1-4b009fe91f52"

s = rdflib.plugin.get('MySQL', store.Store)('rdfstore')

config_string = "host=localhost,password=foo,user=foo,db=foo"
rt = s.open(config_string,create=False)
if rt != store.VALID_STORE:
    s.open(config_string,create=True)


while True:
    graph = rdflib.ConjunctiveGraph(s, identifier = rdflib.URIRef(default_graph_uri))
    rows = graph.query("SELECT ?id ?value { ?id <http://localhost#ha> ?value . }")
    for r in rows:
        print r[0], r[1]
    time.sleep(2)
    print " - - - - - - - - "
当我使用writer提交内容时,我希望看到阅读器上的结果数量增加,但这并没有发生。读取器继续返回与启动时相同的结果。但是,如果我停止读卡器并重新启动它,就会出现新的结果

有人知道我做错了什么吗?

一个简单的解决方法是在reader中的“graph=rdflib.ConjunctiveGraph(…)”行后面加上“graph.commit()”。 我不确定原因是什么,为什么在阅读前提交可以解决这个问题。我猜:

  • 打开MySQLdb连接时,事务将自动启动
  • 此事务看不到其他后续事务的更新
  • “graph.commit()”冒泡到某个“connection.commit()”位置,该位置将丢弃此事务并启动一个新事务

你认为这是一个bug还是一个功能?好的,我浏览了源代码,确实显示所有事情都发生在一个事务中。保存事务的是存储,因此每次重新创建ConnectiveGraph不会执行提交,并且在创建存储实例时它将始终看到该图。它仍然是这样吗?
import rdflib
import random
from rdflib import store

default_graph_uri = "urn:uuid:a19f9b78-cc43-4866-b9a1-4b009fe91f52"

s = rdflib.plugin.get('MySQL', store.Store)('rdfstore')

config_string = "host=localhost,password=foo,user=foo,db=foo"
rt = s.open(config_string,create=False)
if rt != store.VALID_STORE:
    s.open(config_string,create=True)

graph = rdflib.ConjunctiveGraph(s, identifier = rdflib.URIRef(default_graph_uri))

graph.add( ( 
            rdflib.URIRef("http://localhost/"+str(random.randint(0,100))), 
            rdflib.URIRef("http://localhost#ha"),
            rdflib.Literal(str(random.randint(0,100)))
            ) 
            )
graph.commit()