Ошибка [требуется байтоподобный объект, а не 'str'] при импорте CSV в DynamoDB с использованием python - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь прочитать файл CSV и импортировать данные в CSV в DynamoDB. Во-первых, я собираюсь сохранить файл CSV в контейнерах s3. Затем я прочитал S3 в CSV и импортировал эти данные в DynamoDB, используя функцию AWS Lambda. Я использовал следующий скрипт Python в функции Lambda.

import boto3
import csv

def lambda_handler(event, context):
    bucket_name = event['BUCKETNAME']
    key_name = event['KEYNAME']
    table_name = event['TABLENAME']
    recList=[]
    try:
        s3=boto3.client('s3')
        dyndb = boto3.client('dynamodb')
        content= s3.get_object(Bucket=bucket_name, Key=key_name)
        recList = content['Body'].read().split('\n')
        firstrecord=True
        csv_reader = csv.reader(recList, delimiter=',', quotechar='"')
        for row in csv_reader:
            if (firstrecord):
                firstrecord=False
                continue
            emp_id = row[0]
            emp_name = row[1].replace(',','').replace('$','') if row[1] else '-'
            company = row[2].replace(',','').replace('$','') if row[2] else '_'
            email = row[2].replace(',','').replace('$','') if row[2] else '_'
            response = dyndb.put_item(
                TableName=table_name,
                Item={
                'emp_id' : {'S':emp_id},
                'emp_name': {'S':emp_name},
                'company': {'S':company},
                'email': {'S':email},
                }
            )
        print('Put succeeded:')
    except Exception as e:
        print (str(e))

Но когда я вызываю лямбду, выполнение прошло успешно, но импорт не произошел, а следующая ошибка появляется в виде журнала функций.

Function Logs:
START RequestId: 5dcb3a35-d613-411e-be31-333a33c7ccd3 Version: $LATEST
a bytes-like object is required, not 'str'
END RequestId: 5dcb3a35-d613-411e-be31-333a33c7ccd3
REPORT RequestId: 5dcb3a35-d613-411e-be31-333a33c7ccd3  Duration: 1797.48 ms    Billed Duration: 1800 ms    Memory Size: 128 MB Max Memory Used: 77 MB  Init Duration: 294.79 ms    

В приведенном выше журнале

  1. В чем причина a bytes-like object is required, not 'str'?
  2. И является ли это причиной того, что данные не импортируются в DynamoDB?
  3. Что я должен сделать, чтобы решить проблему и полностью заполнить мое требование?

Любая помощь будет принята с благодарностью! Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...