boto - 从桶中获取关键值的更简洁方法?

时间:2014-01-14 23:48:13

标签: amazon-s3 boto

我正试图找出一种通过boto

从s3获取数据的简洁方法

我当前的代码看起来像这样。 s3 manager只是一个为我的应用程序完成所有s3设置的类。

    log.debug("generating downloader")
    downloader = s3_manager()

    log.debug("accessing bucket")
    bucket_archive = downloader.s3_buckets['@archive']

    log.debug("getting key")
    key = bucket_archive.get_key(archive_filename)

    log.debug("getting key into string")
    source = key.get_contents_as_string()

问题是,查看我的调试日志,我向亚马逊s3提出了两个请求:

    key = bucket_archive.get_key(archive_filename)
    source = key.get_contents_as_string()

查看文档[http://boto.readthedocs.org/en/latest/ref/s3.html],似乎调用get_key检查它是否存在,而第二次调用获取实际数据。有谁知道一次做两个方法?对于我们的应用程序来说,使用一个请求执行此操作的更简洁方法更适合。

1 个答案:

答案 0 :(得分:6)

get_key()方法对对象执行HEAD请求以验证它是否存在。如果您确定存在存储桶和密钥,并且不希望有HEAD请求的开销,则可以直接创建Key对象。像这样的东西会起作用:

import boto
s3 = boto.connect_s3()
bucket = s3.get_bucket('mybucket', validate=False)
key = bucket.new_key('myexistingkey')
contents = key.get_contents_as_string()

validate=False调用的get_bucket消除了GET请求,该请求也用于验证存在该存在桶。