Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using Boto3 to interact with amazon Aurora on RDS

I have set up a database in Amazon RDS using Amazon Aurora and would like to interact with the database using Python - the obvious choice is to use Boto.

However, their documentation is awful and does nopt cover ways in which I can interact with the databse to:

  • Run queries with SQL statements
  • Interact with the tables in the database
  • etc

Does anyone have an links to some examples/tutorials, or know how to do these tasks?

like image 905
user3024827 Avatar asked Feb 17 '16 21:02

user3024827


People also ask

Does Amazon RDS support Amazon Aurora?

Aurora is part of the managed database service Amazon Relational Database Service (Amazon RDS). Amazon RDS is a web service that makes it easier to set up, operate, and scale a relational database in the cloud.

Is AWS Aurora Faster than RDS?

RDS allows you to provision up to 5 replicas, and the process of replication is slower compared to Aurora. Aurora allows you to provision up to 15 replicas, and the replication is done in milliseconds. Aurora scales faster because it can add new read replicas quickly.


2 Answers

When using Amazon RDS offerings (including Aurora), you don't connect to the database via any AWS API (including Boto). Instead you would use the native client of your chosen database. In the case of Aurora, you would connect using the MySQL Command Line client. From there, you can query it just like any other MySQL database.

There's a brief section of the "Getting Started" documentation that talks about connecting to your Aurora database:

Connecting to an Amazon Aurora DB Cluster

like image 200
Justin Niessner Avatar answered Oct 01 '22 01:10

Justin Niessner


Here are a couple examples:

INSERT example:

import boto3

sql = """
        INSERT INTO YOUR_TABLE_NAME_HERE
        (
            your_column_name_1
            ,your_column_name_2
            ,your_column_name_3)
        VALUES(
            :your_param_1_name
            ,:your_param_2_name)
            ,:your_param_3_name
        """

param1 = {'name':'your_param_1_name', 'value':{'longValue': 5}}
param2 = {'name':'your_param_2_name', 'value':{'longValue': 63}}
param3 = {'name':'your_param_3_name', 'value':{'stringValue': 'para bailar la bamba'}}

param_set = [param1, param2, param3]

db_clust_arn = 'your_db_cluster_arn_here'

db_secret_arn = 'your_db_secret_arn_here'

rds_data = boto3.client('rds-data')

response = rds_data.execute_statement(
    resourceArn = db_clust_arn, 
    secretArn = db_secret_arn, 
    database = 'your_database_name_here', 
    sql = sql,
    parameters = param_set)

print(str(response))

READ example:

import boto3

rds_data = boto3.client('rds-data')

db_clust_arn = 'your_db_cluster_arn_here'

db_secret_arn = 'your_db_secret_arn_here'


employee_id = 35853

get_vacation_days_sql = f"""
    select vacation_days_remaining
    from employees_tbl
    where employee_id = {employee_id}    
        """


response1 = rds_data.execute_statement(
        resourceArn = db_clust_arn, 
        secretArn = db_secret_arn, 
        database = 'your_database_name_here', 
        sql = get_vacation_days_sql)

#recs is a list (of rows returned from Db)
recs = response1['records']

print(f"recs === {recs}")
#recs === [[{'longValue': 57}]]

#single_row is a list of dictionaries, where each dictionary represents a 
#column from that single row
for single_row in recs:
    print(f"single_row === {single_row}")
    #single_row === [{'longValue': 57}]
    
    #one_dict is a dictionary with one key value pair
    #where the key is the data type of the column and the 
    #value is the value of the column
    #each additional column is another dictionary
    for single_column_dict in single_row:
        print(f"one_dict === {single_column_dict}")
        # one_dict === {'longValue': 57}

        vacation_days_remaining = single_column_dict['longValue']
        
        print(f'vacation days remaining === {vacation_days_remaining}')

Source Link: https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/data-api.html#data-api.calling.python

like image 25
vbp13 Avatar answered Oct 01 '22 00:10

vbp13