我试着用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)
价值观
^{pr2}$返回感兴趣的信息,但其格式我还没有弄清楚如何提取序列号或修订号,或文档信息:
{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)
返回一个生成器对象,并不像CouchDBguide建议的那样在它们进来时提供通知。。。。在
有人成功地使用了couchdb python中的更改吗?在
我用类似的东西设置了一个邮件假脱机程序。你还需要加载会议室()我还使用了一个过滤器,只接收未发送到后台处理程序更改订阅源的电子邮件。在
这将允许您直接从changes提要访问您的文档,根据需要操作数据,最后更新文档。我使用try/except块数据库保存(doc)’,这样我可以在编辑文档时捕捉文档是否已更新,并在保存之前重新加载文档。在
我使用长轮询而不是连续轮询,这对我来说很好。在长轮询模式下,
db.changes
块,直到至少发生一个更改,然后返回生成器对象中的所有更改。在下面是我用来处理更改的代码。
settings.db
是我的CouchDB数据库对象。在如您所见,这是一个无限循环,在每次迭代中我们调用
changes
。对changes
的调用返回一个包含两个元素的字典,即最近更新的序列号和修改的对象。然后循环每个结果,加载适当的对象并处理它。在对于连续进纸,使用
while True:
行,而不是while True:
行。在相关问题 更多 >
编程相关推荐