Python 从aws s3 bucket读取lambda中zip文件中的.csv
我在s3存储桶中有一个zip文件。我在内存中解压该zip文件(不解压),并将.csv中的数据转储到数据库中的表中。但在转储这些表时,由于程序按csv的顺序转储csv,因此会先转储一些表,然后再转储其他表。例如,我有两个表“dealer_master”和“billing_master”,两个表的结构: 1) 经销商数据Python 从aws s3 bucket读取lambda中zip文件中的.csv,python,pandas,amazon-web-services,amazon-s3,Python,Pandas,Amazon Web Services,Amazon S3,我在s3存储桶中有一个zip文件。我在内存中解压该zip文件(不解压),并将.csv中的数据转储到数据库中的表中。但在转储这些表时,由于程序按csv的顺序转储csv,因此会先转储一些表,然后再转储其他表。例如,我有两个表“dealer_master”和“billing_master”,两个表的结构: 1) 经销商数据 经销商id:主键 国家 枕形 地址 创建日期 2) 计费数据 票据id:主键 经销商id:外键 账单金额 账单日期 在zip文件中,我在经销商数据之前获取账单数据。因此,获
- 经销商id:主键
- 国家
- 枕形
- 地址
- 创建日期
- 票据id:主键
- 经销商id:外键
- 账单金额
- 账单日期
def etl_job():
`data = json.load(open('path_to_json'))`
`logger = helpers.setup_logging()`
`s3_client = boto3.client('s3',aws_access_key_id=data['aws_access_key_id'],
aws_secret_access_key=data['aws_secret_access_key'])`
`s3_resource = boto3.resource('s3',aws_access_key_id=data['aws_access_key_id'],
aws_secret_access_key=data['aws_secret_access_key'])`
`keys = []`
`resp = s3_client.list_objects_v2(Bucket=bucket_name)`
`for obj in resp['Contents']:`
`keys.append(obj['Key'])
for key in keys:
names = key.split("/")
obj = s3_resource.Bucket(bucket_name).Object(helpers.zip_file_name())
buffer = io.BytesIO(obj.get()["Body"].read())
zip_file = zipfile.ZipFile(buffer,'r')
logger.info("Name of csv in zip file :%s",zip_file.namelist())
logs = ""
dataframe = pd.DataFrame()
for name_of_zipfile in zip_file.namelist():
zip_open = pd.read_csv(zip_file.open(name_of_zipfile))
zip_open = zip_open.dropna()
table_name = "{name}".format(name=name_of_zipfile.replace('.csv',''))
try :
zip_open.to_sql(name=name_of_zipfile.replace('.csv',''), con=database.db_connection(), if_exists = 'append', index=False)
except SQLAlchemyError as sqlalchemy_error:
print sqlalchemy_error
database.db_connection().execute('SET FOREIGN_KEY_CHECKS=1;')`