我试图找出一种通过boto从s3获取数据的简洁方法
我目前的代码看起来像这样.s3管理器只是一个为我的应用程序完成所有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()
Run Code Online (Sandbox Code Playgroud)
问题是,看着我的调试日志,我正在向亚马逊s3提出两个请求:
key = bucket_archive.get_key(archive_filename)
source = key.get_contents_as_string()
Run Code Online (Sandbox Code Playgroud)
查看文档[ http://boto.readthedocs.org/en/latest/ref/s3.html ],似乎调用get_key检查是否存在,而第二次调用获取实际数据.有谁知道一次做两个方法?使用一个请求执行此操作的更简洁方法对于我们的应用程序更为可取.
该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()
Run Code Online (Sandbox Code Playgroud)
将validate=False在电话会议中get_bucket消除了也旨在验证桶中存在的GET请求.