gpt4 book ai didi

python - rdflib 图未更新。为什么?

转载 作者:太空宇宙 更新时间:2023-11-04 01:43:56 24 4
gpt4 key购买 nike

我正在尝试理解这种行为。这绝对不是我所期望的。我有两个程序,一个阅读器和一个编写器。读者打开一个RDFlib graph store,然后每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 " - - - - - - - - "

第二个程序是向三元组添加内容的编写器

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()

当我使用编写器提交内容时,我希望看到读者的结果数量增加,但这并没有发生。读取器继续返回与开始时相同的结果。但是,如果我停止阅读器并重新启动它,就会出现新的结果。

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

最佳答案

一个简单的解决方法是将“graph.commit()”放在阅读器中的“graph = rdflib.ConjunctiveGraph(...)”行之后。我不确定是什么原因以及为什么在读取之前提交可以修复此问题。我猜测:

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

关于python - rdflib 图未更新。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1860282/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com