Ejemplos de uso del conector Python de Amazon Redshift - Amazon Redshift

Ejemplos de uso del conector Python de Amazon Redshift

A continuación se muestran ejemplos de cómo utilizar el conector Python de Amazon Redshift. Para ejecutarlos, primero debe instalar el conector Python. Para obtener más información sobre la instalación del conector Python de Amazon Redshift, consulte Instalación del conector Python de Amazon Redshift. Para obtener más información sobre las opciones de configuración que puede utilizar con el conector Python, consulte Opciones de configuración para el conector Python de Amazon Redshift.

Conexión y consulta a un clúster de Amazon Redshift mediante credenciales de AWS

El siguiente ejemplo le guía a través del proceso de conexión a un clúster de Amazon Redshift con sus credenciales de AWS y, a continuación, de consulta de una tabla y de recuperación de los resultados de la consulta.

#Connect to the cluster >>> import redshift_connector >>> conn = redshift_connector.connect( host='examplecluster.abc123xyz789.us-west-1.redshift.amazonaws.com', database='dev', port=5439, user='awsuser', password='my_password' ) # Create a Cursor object >>> cursor = conn.cursor() # Query a table using the Cursor >>> cursor.execute("select * from book") #Retrieve the query result set >>> result: tuple = cursor.fetchall() >>> print(result) >> (['One Hundred Years of Solitude', 'Gabriel García Márquez'], ['A Brief History of Time', 'Stephen Hawking'])

Habilitación de la confirmación automática

La propiedad de confirmación automática se desactiva de manera predeterminada, de acuerdo con la especificación de la API de base de datos de Python. Puede utilizar los siguientes comandos para activar la propiedad de confirmación automática de la conexión después de ejecutar un comando de reversión para asegurarse de que no haya una transacción en curso.

#Connect to the cluster >>> import redshift_connector >>> conn = redshift_connector.connect(...) # Run a rollback command >>> conn.rollback() # Turn on autocommit >>> conn.autocommit = True >>> conn.run("VACUUM") # Turn off autocommit >>> conn.autocommit = False

Configuración del estilo de parámetro del cursor

El estilo de parámetro de un cursor se puede modificar mediante cursor.paramstyle. El estilo de parámetro predeterminado que se utiliza es format. Los valores válidos del estilo de parámetro son qmark, numeric, named, format y pyformat.

A continuación, se muestran ejemplos del uso de varios estilos de parámetro para pasar parámetros a una instrucción SQL de ejemplo.

# qmark redshift_connector.paramstyle = 'qmark' sql = 'insert into foo(bar, jar) VALUES(?, ?)' cursor.execute(sql, (1, "hello world")) # numeric redshift_connector.paramstyle = 'numeric' sql = 'insert into foo(bar, jar) VALUES(:1, :2)' cursor.execute(sql, (1, "hello world")) # named redshift_connector.paramstyle = 'named' sql = 'insert into foo(bar, jar) VALUES(:p1, :p2)' cursor.execute(sql, {"p1":1, "p2":"hello world"}) # format redshift_connector.paramstyle = 'format' sql = 'insert into foo(bar, jar) VALUES(%s, %s)' cursor.execute(sql, (1, "hello world")) # pyformat redshift_connector.paramstyle = 'pyformat' sql = 'insert into foo(bar, jar) VALUES(%(bar)s, %(jar)s)' cursor.execute(sql, {"bar": 1, "jar": "hello world"})

Uso de COPY para copiar datos de un bucket de Amazon S3 y UNLOAD para escribirlos en este

En el siguiente ejemplo, se muestra cómo copiar datos de un bucket de Amazon S3 en una tabla y luego descargarlos de esa tabla en el bucket.

Un archivo de texto denominado category_csv.txt que contiene los siguientes datos se carga en un bucket de Amazon S3.

12,Shows,Musicals,Musical theatre 13,Shows,Plays,"All ""non-musical"" theatre" 14,Shows,Opera,"All opera, light, and ""rock"" opera" 15,Concerts,Classical,"All symphony, concerto, and choir concerts"

A continuación se muestra un ejemplo del código de Python, que se conecta primero a la base de datos de Amazon Redshift. A continuación crea una tabla llamada category y copia los datos CSV del bucket de S3 en la tabla.

#Connect to the cluster and create a Cursor >>> import redshift_connector >>> with redshift_connector.connect(...) as conn: >>> with conn.cursor() as cursor: #Create an empty table >>> cursor.execute("create table category (catid int, cargroup varchar, catname varchar, catdesc varchar)") #Use COPY to copy the contents of the S3 bucket into the empty table >>> cursor.execute("copy category from 's3://testing/category_csv.txt' iam_role 'arn:aws:iam::123:role/RedshiftCopyUnload' csv;") #Retrieve the contents of the table >>> cursor.execute("select * from category") >>> print(cursor.fetchall()) #Use UNLOAD to copy the contents of the table into the S3 bucket >>> cursor.execute("unload ('select * from category') to 's3://testing/unloaded_category_csv.txt' iam_role 'arn:aws:iam::123:role/RedshiftCopyUnload' csv;") #Retrieve the contents of the bucket >>> print(cursor.fetchall()) >> ([12, 'Shows', 'Musicals', 'Musical theatre'], [13, 'Shows', 'Plays', 'All "non-musical" theatre'], [14, 'Shows', 'Opera', 'All opera, light, and "rock" opera'], [15, 'Concerts', 'Classical', 'All symphony, concerto, and choir concerts'])

Si no lo ha establecido autocommit a true, confirme con conn.commit() después de ejecutar las instrucciones execute().

Los datos se descargan en el archivo unloaded_category_csv.text0000_part00 del bucket de S3 con el siguiente contenido:

12,Shows,Musicals,Musical theatre 13,Shows,Plays,"All ""non-musical"" theatre" 14,Shows,Opera,"All opera, light, and ""rock"" opera" 15,Concerts,Classical,"All symphony, concerto, and choir concerts"