Прочитать имена столбцов AWS S3 CSV в Lambda - PullRequest
2 голосов
/ 12 октября 2019

Я пытаюсь написать сценарий, который собирает схему из таблицы базы данных MySQL AWS Aurora Serverless, собирает заголовки столбцов из файла CSV, хранящегося в корзине AWS S3, и записывает CSV в таблицу только в случае заголовков столбцовявляются подмножеством схемы (например, если полями таблицы являются ['Name', 'DOB', 'Height'], а полями CSV являются ['Name', 'DOB', 'Weight'], скрипт выдастисключение.

До сих пор я успешно возвратил схему таблицы в лямбда-функции AWS и успешно прочитал файл CSV, но я не уверен, как получить заголовки столбцов из объекта S3.

def return_db_schema(event):
    schema = []
    conn = pymysql.connect(rds_host, user=name, passwd=password, db=db_name, connect_timeout=5)
    with conn.cursor() as cur:
        cur.execute('SHOW columns FROM SampleTable')
        conn.commit()
        cur.close()
        for row in cur:
            schema.append(list(row)[0])
        return schema

def return_csv_cols(event):
    s3 = boto3.client('s3')
    tester = s3.get_object(Bucket=s3_bucket, Key=test_key)
    contents = tester['Body'].read()

def main(event, context):
    print(return_db_schema(event))
    print()
    print(return_csv_cols(event))

Я не уверен, как действовать дальше (например, есть ли способ сделать это, не загружая CSV-файл в DataFrame pandas и не вызывая df.columns() или что-то в этом роде?).

Ответы [ 2 ]

0 голосов
/ 12 октября 2019

Я решил это с помощью следующего кода:

    s3 = boto3.client('s3')
    tester = s3.get_object(Bucket=s3_bucket, Key=test_key)
    contents = tester['Body'].read().decode('UTF-8')
    cols = contents.split('\n')[0].split(',')
    return cols, contents
0 голосов
/ 12 октября 2019

Надеюсь, это поможет,

После того, как вы откроете курсор, вы должны увидеть следующее

my_columns_names = cursor.description

Также есть несколько предложений,

  1. Вывам не нужно делать cur.close(), так как вы открываете его, используя with менеджер контекста.
  2. Вы можете добавить код для закрытия соединения с БД (conn).

Источник: https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-description.html

...