Couchbase:python SDK "uppend"
Couchbase: python SDK "uppend"
我想做一个 "uppend_multi": 一个 append_multi
(http://pythonhosted.org/couchbase/api/couchbase.html#couchbase.bucket.Bucket.append_multi),其中一些键可能不存在。如果它们尚不存在,则追加操作应该是插入操作。我怎样才能做到这一点? API 文档中没有任何内容表明这是受支持的,但我想这是一个非常常见的操作。
现在我正在这样做,但需要做的事情似乎很自然,我非常怀疑这是最好的方法:
def _uppend_multi(bucket, append_dict):
reinsert_dict = {}
try:
bucket.append_multi(append_dict, format = couchbase.FMT_UTF8)
except CouchbaseError as exc:
for k, res in exc.all_results.items():
if res.success:
pass
else:
reinsert_dict[k] = append_dict[k]
if len(reinsert_dict.keys()) > 0:
bucket.insert_multi(reinsert_dict, format = couchbase.FMT_UTF8)
据我所知,在 Couchbase Python SDK 中没有这样的 "uppend" 操作,在较低级别的 C API (libcouchbase
) 中也没有。
您目前正在做的可能是一个非常合理的解决方案。
我想做一个 "uppend_multi": 一个 append_multi
(http://pythonhosted.org/couchbase/api/couchbase.html#couchbase.bucket.Bucket.append_multi),其中一些键可能不存在。如果它们尚不存在,则追加操作应该是插入操作。我怎样才能做到这一点? API 文档中没有任何内容表明这是受支持的,但我想这是一个非常常见的操作。
现在我正在这样做,但需要做的事情似乎很自然,我非常怀疑这是最好的方法:
def _uppend_multi(bucket, append_dict):
reinsert_dict = {}
try:
bucket.append_multi(append_dict, format = couchbase.FMT_UTF8)
except CouchbaseError as exc:
for k, res in exc.all_results.items():
if res.success:
pass
else:
reinsert_dict[k] = append_dict[k]
if len(reinsert_dict.keys()) > 0:
bucket.insert_multi(reinsert_dict, format = couchbase.FMT_UTF8)
据我所知,在 Couchbase Python SDK 中没有这样的 "uppend" 操作,在较低级别的 C API (libcouchbase
) 中也没有。
您目前正在做的可能是一个非常合理的解决方案。