Python Подключение к AWS Aurora Serverless MySQL с помощью SQLAlchemy

Есть ли способ указать мое соединение с SQLAlchemy с экземпляром бессерверной базы данных MySQL AWS RDS Aurora без Secrets Manager ARN? У меня есть имя пользователя базы данных, пароль, конечная точка, ARN и т. Д., И в идеале я бы инициализировал движок, а затем использовал df.to_sql() для загрузки DataFrame в таблицу на экземпляре Aurora.

...
else:
   engine = create_engine([WHAT DO I SPECIFY HERE?])
   with engine.connect() as conn:
      df.to_sql([CODE TO APPEND TO EXISTING TABLE HERE])...

comment
Вы создали секрет в диспетчере секретов aws, который содержит имя пользователя базы данных, пароль и т. Д.?   -  person committedandroider    schedule 21.10.2019
comment
Ага! Также имейте секретный ARN.   -  person OJT    schedule 22.10.2019


Ответы (2)


Из документации Alchemy - https://docs.sqlalchemy.org/en/13/dialects/mysql.html, вот как должна выглядеть строка подключения - параметр в create_engine - для MySQL

mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>]
person committedandroider    schedule 21.10.2019
comment
Благодарим за ответ. Как это будет выглядеть в контексте бессерверного экземпляра MySQL AWS RDS Aurora? ‹Username› = имя пользователя экземпляра базы данных, ‹password› = пароль экземпляра базы данных, ‹host› = конечная точка экземпляра базы данных? Какие варианты? Зачем мне в префиксе pymysql? - person OJT; 23.10.2019
comment
Я думаю, вам нужен pymysql, потому что sqlalchemy - это набор инструментов Python SQL, а pymysql - это клиент python mysql - person committedandroider; 23.10.2019

Я не знаю, сможете ли вы подключиться к Aurora без секретного ARN, но если вы хотите его использовать, вы можете установить такой драйвер: https://github.com/koxudaxi/py-data-api

Что позволит вам сделать что-то вроде следующего:

def example_driver_for_sqlalchemy():
    from sqlalchemy.engine import create_engine
    engine = create_engine(
        'mysql+pydataapi://',
        connect_args={
            'resource_arn': 'arn:aws:rds:us-east-1:123456789012:cluster:dummy',
            'secret_arn': 'arn:aws:secretsmanager:us-east-1:123456789012:secret:dummy',
            'database': 'test'
        }
    )
    result: ResultProxy = engine.execute("select * from pets")
    print(result.fetchall())
person Baruch Spinoza    schedule 20.11.2019