Exemples d'utilisation du connecteur Amazon Redshift Python - Amazon Redshift

Amazon Redshift ne prendra plus en charge la création de nouveaux Python UDFs à compter du 1er novembre 2025. Si vous souhaitez utiliser Python UDFs, créez la version UDFs antérieure à cette date. Le Python existant UDFs continuera à fonctionner normalement. Pour plus d'informations, consultez le billet de blog.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Exemples d'utilisation du connecteur Amazon Redshift Python

Vous trouverez ci-dessous des exemples d'utilisation du connecteur Amazon Redshift Python. Pour les exécuter, vous devez installer au préalable le connecteur Python. Pour plus d'informations sur l'installation du connecteur Python Amazon Redshift, consultez Installation du connecteur Amazon Redshift Python. Pour plus d'informations sur les options de configuration que vous pouvez utiliser avec le connecteur Python, consultez Options de configuration du connecteur Amazon Redshift Python.

Connexion à un cluster Amazon Redshift et interrogation à l'aide d'informations d'identification AWS

L'exemple suivant vous explique comment vous connecter à un cluster Amazon Redshift à l'aide de vos AWS informations d'identification, puis comment interroger une table et récupérer les résultats de la requête.

#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'])

Activation de la validation automatique

La propriété autocommit est désactivée par défaut, conformément à la spécification de l'API de base de données Python. Vous pouvez utiliser les commandes suivantes pour activer la propriété de validation automatique de la connexion après avoir exécuté une commande de restauration pour vous assurer qu'une transaction n'est pas en cours.

#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

Configuration du paramstyle d'un curseur

Le paramstyle d'un curseur peut être modifié via cursor.paramstyle. Le paramstyle par défaut utilisé est format. Les valeurs valides pour paramstyle sont qmark, numeric, named, format et pyformat.

Vous trouverez ci-dessous des exemples d'utilisation de différents paramstyles pour transmettre des paramètres à un exemple d'instruction SQL.

# 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"})

Utilisation de COPY pour copier des données à partir d'un compartiment Amazon S3 et de UNLOAD pour y écrire des données

L'exemple suivant montre comment copier des données depuis un compartiment Amazon S3 dans une table, puis comment les décharger de cette table dans le compartiment.

Un fichier texte nommé category_csv.txt contenant les données suivantes est chargé dans un compartiment 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"

Voici un exemple de code Python, qui se connecte d'abord à la base de données Amazon Redshift. Il crée ensuite une table appelée category et copie les données CSV du compartiment S3 dans la table.

#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 vous n'avez pas défini autocommit sur true, validez avec conn.commit() après avoir exécuté les instructions execute().

Les données sont déchargées dans le fichier unloaded_category_csv.text0000_part00 dans le compartiment S3, avec le contenu suivant :

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"