gpt4 book ai didi

python - couchdb-python 更改通知

转载 作者:太空狗 更新时间:2023-10-29 20:52:40 24 4
gpt4 key购买 nike

我正在尝试使用 couchdb.py 来创建和更新数据库。我想实现通知更改,最好是在连续模式下。运行下面发布的测试代码,我看不到更改方案在 python 中是如何工作的。

class SomeDocument(Document):

#############################################################################

# def __init__ (self):

intField = IntegerField()#for now - this should to be an integer
textField = TextField()

couch = couchdb.Server('http://127.0.0.1:5984')
databasename = 'testnotifications'

if databasename in couch:
print 'Deleting then creating database ' + databasename + ' from server'
del couch[databasename]
db = couch.create(databasename)
else:
print 'Creating database ' + databasename + ' on server'
db = couch.create(databasename)

for iii in range(5):

doc = SomeDocument(intField=iii,textField='somestring'+str(iii))
doc.store(db)
print doc.id + '\t' + doc.rev

something = db.changes(feed='continuous',since=4,heartbeat=1000)

for iii in range(5,10):

doc = SomeDocument(intField=iii,textField='somestring'+str(iii))
doc.store(db)
time.sleep(1)
print something
print db.changes(since=iii-1)

值(value)

db.changes(since=iii-1) 

返回感兴趣的信息,但采用的格式我还没有想出如何从中提取序列号或修订号,或文档信息:

{u'last_seq': 6, u'results': [{u'changes': [{u'rev': u'1-9c1e4df5ceacada059512a8180ead70e'}], u'id': u'7d0cb1ccbfd9675b4b6c1076f40049a8', u'seq': 5}, {u'changes': [{u'rev': u'1-bbe2953a5ef9835a0f8d548fa4c33b42'}], u'id': u'7d0cb1ccbfd9675b4b6c1076f400560d', u'seq': 6}]}

与此同时,我真正感兴趣的代码是:

db.changes(feed='continuous',since=4,heartbeat=1000)

返回一个生成器对象并且在它们进入时似乎不提供通知,因为 CouchDB guide建议....

有人成功使用过 couchdb-python 的更改吗?

最佳答案

我使用长轮询而不是连续轮询,这对我来说没问题。在长轮询模式下,db.changes 会阻塞,直到至少发生一个更改,然后返回一个生成器对象中的所有更改。

这是我用来处理更改的代码。 settings.db 是我的 CouchDB 数据库对象。

since = 1
while True:
changes = settings.db.changes(since=since)
since = changes["last_seq"]
for changeset in changes["results"]:
try:
doc = settings.db[changeset["id"]]
except couchdb.http.ResourceNotFound:
continue
else:
// process doc

如您所见,这是一个无限循环,我们在每次迭代中调用 changes。对 changes 的调用返回一个包含两个元素的字典,即最近更新的序列号和被修改的对象。然后我遍历每个结果加载适当的对象并处理它。

对于连续提要,不要使用 while True: 行,而是使用 for changes in settings.db.changes(feed="continuous", since=since)

关于python - couchdb-python 更改通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7840383/

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