• Couchbase III(Python Library)


    Couchbase III(Python Library)

    第一步

    安装

    使用pip安装:

    >pip install couchbase --quiet
    

    确认是否安装成功:

    >python -c "import couchbase"    
    

    API 第一印象

    from couchbase import Couchbase
    from couchbase.exceptions import CouchbaseError
    
    c = Couchbase.connect(bucket='beer-sample', host='localhost')
    
    try:
        beer = c.get("aass_brewery-juleol")
    
    except CouchbaseError as e:
        print "Couldn't retrieve value for key", e
        # Rethrow the exception, making the application exit
        raise
    
    doc = beer.value
    
    # Because Python 2.x will complain if an ASCII format string is used
    # with Unicode format values, we make the format string unicode as well.
    
    
    print unicode("{name}, ABV: {abv}").format(name=doc['name'], abv=doc['abv'])
    
    doc['comment'] = "Random beer from Norway"
    
    try:
        result = c.replace("aass_brewery-juleol", doc)
        print result
    
    except CouchbaseError as e:
        print "Couldn't replace key"
        raise
    

    存储文档

    基本操作

    • set(key, value)

      Stores the document value under the key. 
      If the key did not previously exist, it is created. 
      If the key already exists, its existing value is overwritten with the new contents of value.
      
    • add(key, value)

      Stores the document value under the key, but only if key does not already exist. 
      If key already exists, an exception is thrown.
      
    • replace(key, value)

      Replace is the inverse of add. 
      It sets the contents of key to value, but only if the key already exists. 
      If the key does not already exist, an exception is thrown.
      
    • delete(key)

      Deletes the key from the bucket. 
      Future attempts to access this key via get raise an exception until something is stored again 
      for this key using one of the set methods.
      

    获取文档

    获取单文档
    #无异常处理
    client.store("my list", [])
    result = client.get("my list")
    doc = result.value
    
    #异常处理版, 单请求
    result = client.get("non-exist-key", quiet=True)
    if result.success:
        print "Got document OK"
    else:
        print ("Couldn't retrieve document. "
           "Result was received with code"), result.rc
    
    #异常处理版,所有连接请求
    client = Couchbase.connect(bucket='default', quiet=True)
    result = client.get("non-exist-key")
    if result.success:
        print "Got document OK"
    else:
        print "Couldn't retrieve document"
    

    获取多文档

    client.set_multi({
        'sheep_counting' : ['first sheep', 'second sheep'],
        'famous_sheep' : {'sherry lewis' : 'Lamb Chop'}
    })
    keys = ('sheep_counting', 'famous_sheep')
    results = client.get_multi(keys)
    for key, result in results.items():
        doc = result.value
    
    #异常处理版
    results = client.get_multi(("i exist", "but i don't"), quiet=True)
    #迭代判断
    for key results:
    if result.success:
        print "Got document OK"
        doc = result.value
    else:
        print "Couldn't retrieve document"
    #一次判断所有
    #if not results.all_ok:
    #print "Couldn't get all keys"
    
    异常处理

    文档不存在时 ,抛出 couchbase.exceptions.NotFoundError

    使用 Connection.quiet 可以改变异常处理的行为

    获取View
    results = client.query("beer", "brewery_beers",
                       include_docs=True, limit=5)
    for result in results:
        print "key is %r" % (result.key)
        doc = result.doc.value
        if doc['type'] == "beer":
            print "Got a beer. It's got %0.2f ABV" % (doc['abv'],)
    
    • include_docs

      This boolean parameter indicates whether the corresponding document should be retrieved 
      for each row fetched.
      If this is true, the doc property of the ViewRow object yielded by the iterator returned 
      by query contains a Result object that contains the document for the key.
      
    • reduce

      This boolean parameter indicates whether the server should also pass the results to 
      the view’s reduce function. 
      An exception is raised if the view does not have a reduce method defined.
      
    • limit

      This numeric parameter indicates the maximum amount of results to fetch from the query. 
      This parameter is handy if your query can produce a lot of results.
      
    • descending

      This boolean parameter indicates that the results should be returned in reverse order.
      
    • stale

      This boolean parameter controls the tradeoff between performance and freshness of data.
      
    • debug

      This boolean parameter fetches low-level debugging information from the view engine.
      
    • streaming

      This boolean parameter indicates whether the view results should be decoded in a streaming manner.
      When enabled, the iterator internally fetches chunks of the response as required.
      As this is less efficient than fetching all results at once, it is disabled by default, 
      but can be very useful if you have a large dataset because 
      it prevents the entire view from being buffered in memory.
      
    编码与序列化

    Python SDK 默认使用 编码格式JSON,使用json标准库

    也可以指定使用其他编码格式:

    import pprint
    from couchbase import Couchbase, FMT_PICKLE
    c = Couchbase.connect(bucket='default')
    c.set("a_python_object", object(), format=FMT_PICKLE)
    c.set("a_python_set", set([1,2,3]), format=FMT_PICKLE)
    pprint.pprint(c.get("a_python_object").value)
    pprint.pprint(c.get("a_python_set").value)
    

    Output:

    <object object at 0x7fa7d0ad80e0>
    set([1, 2, 3])
    

    链接

  • 相关阅读:
    微信小程序swiper个性化定制
    php脚本巧用正则批量替换函数参数
    Phpstorm中添加xdebug调试工具。
    apache服务器禁止浏览目录文件
    mysql_connect()函数使用报错
    composer创建新项目报错
    安利一个简单的零配置的命令行http服务器(http-server)
    Laravel笔记之tinker和时间函数
    即时通信2
    即时通信1
  • 原文地址:https://www.cnblogs.com/nagi/p/4191400.html
Copyright © 2020-2023  润新知