0

我对python很陌生。我们正在做一个小项目,我们只是在查询一个表并希望将其作为 json 文件写入 S3 存储桶。

我已经让这些部分分开工作,即查询数据库并将其写入带有 petl 的 json 文件。

import petl as etl
...
table = etl.fromdb(connection, 'My SQL')
etl.tojson(table, 'data.json')  

然后我用 boto 单独将此文件写入 s3 存储桶:

import boto3  
...
s3 = boto3.client('s3')
BUCKET = my-bucket-name
s3.upload_file('data.json', BUCKET, 'data.json')  

工作正常。它让他们在我卡住的 lambda 环境中一起工作。我最初认为我不能将本地文件用作临时文件,但后来了解到 lambda 应该有一些本地文件空间和写入能力。但是当我用中间的“data.json”文件大致尝试上面的代码时,我得到了这个错误:

[Errno 30] Read-only file system: 'data.json'

我还尝试了以下方法:

table = etl.fromdb(connection, 'My SQL')
etl.tojson(table, json_string) 
s3 = boto3.client('s3')
s3.Object(BUCKET, 'myData.json').put(Body=json_string)  

但我只是收到一条错误消息“没有这样的文件或目录”。

我一定遗漏了一些基本的东西,但问题似乎是,我需要 etl 将表格写成 json 格式的字符串。然后我想做 s3.put_object 或 s3.Object().put() body=jsonString。但我不知道该怎么做。

我一直在浏览 petl docs并尝试了一些不同的东西,但没有任何效果。

也曾短暂尝试让 petl 写入某种 IOBytes 数组,但不记得是如何失败的。此处记录了 petl 的“源”表。它们基本上是某种可迭代的,包括作为第一行的标题行,然后是数据行。

4

0 回答 0