Connecteur Python API¶

Le Snowflake Connector pour Python implĂ©mente la spĂ©cification Python Database API v2.0 (PEP-249). Ce chapitre traite de l’API standard et des extensions spĂ©cifiques Ă  Snowflake.

Pour plus d’informations, voir la documentation PEP-249.

Dans ce chapitre :

Module : snowflake.connector¶

Le module principal est snowflake.connector qui crée un objet Connection et fournit des classes Error.

Constantes¶

apilevel¶

Constante de chaĂźne indiquant le niveau API pris en charge. Le connecteur prend en charge API "2.0".

threadsafety¶

Constante entiĂšre indiquant le niveau de sĂ©curitĂ© de « thread safety Â» pris en charge par l’interface. Le connecteur Snowflake pour Python prend en charge le niveau 2, qui indique que les threads peuvent partager le module et les connexions.

paramstyle¶

Constante de chaĂźne indiquant le type de formatage de marqueur de paramĂštre attendu par l’interface. Le connecteur prend en charge le type "pyformat" par dĂ©faut, qui s’applique aux codes de format Ă©tendus Python (par exemple ...WHERE name=%s ou ...WHERE name=%(name)s). Connection.connect peut remplacer paramstyle pour changer les formats de variables de liaison en "qmark" ou "numeric", oĂč les variables sont ? ou :N, respectivement.

Par exemple :

format: .execute("... WHERE my_column = %s", (value,))
pyformat: .execute("... WHERE my_column = %(name)s", {"name": value})
qmark: .execute("... WHERE my_column = ?", (value,))
numeric: .execute("... WHERE my_column = :1", (value,))
Copy

Note

La variable de liaison se produit du cĂŽtĂ© client si paramstyle est "pyformat" ou "format", et du cĂŽtĂ© serveur si "qmark" ou "numeric". Actuellement, il n’y a pas de diffĂ©rence significative entre ces options en termes de performances ou de fonctionnalitĂ©s, car le connecteur ne prend pas en charge la compilation de texte SQL suivi d’exĂ©cutions multiples. Au lieu de cela, les options "qmark" et "numeric" s’alignent sur la compatibilitĂ© du texte de requĂȘte des autres pilotes (Ă  savoir JDBC, ODBC, Pilote Go Snowflake), qui prennent en charge les liaisons cĂŽtĂ© serveur avec le format de variable ? ou :N.

Fonctions¶

connect(parameters...)¶
But:

Constructeur pour créer une connexion à la base de données. Renvoie un objet Connection.

Par dĂ©faut, le mode « autocommit Â» est activĂ© (c’est-Ă -dire que si la connexion est fermĂ©e, toutes les modifications sont validĂ©es). Si vous avez besoin d’une transaction, utilisez la commande BEGIN pour dĂ©marrer la transaction, et COMMIT ou ROLLBACK pour valider ou annuler toute modification.

ParamĂštres:

Les paramĂštres d’entrĂ©e valides sont :

ParamĂštre

Obligatoire

Description

account

Oui

Votre identificateur de compte. L’identificateur du compte ne comprend pas le suffixe snowflakecomputing.com. . . Pour plus de dĂ©tails et d’exemples, voir Notes sur l’utilisation (dans cette rubrique).

user

Oui

Nom de connexion de l’utilisateur.

password

Oui

Mot de passe de l’utilisateur.

application

Nom qui identifie l’application effectuant la connexion.

region

ObsolÚte Cette description du paramÚtre concerne uniquement la rétrocompatibilité.

host

Nom d’hîte.

port

Numéro de port (443 par défaut).

database

Nom de la base de données par défaut à utiliser. AprÚs la connexion, vous pouvez utiliser USE DATABASE pour modifier la base de données.

schema

Nom du schéma par défaut à utiliser pour la base de données. AprÚs la connexion, vous pouvez utiliser USE SCHEMA pour modifier le schéma.

role

Nom du rÎle par défaut à utiliser. AprÚs la connexion, vous pouvez utiliser USE ROLE pour modifier le rÎle.

warehouse

Nom de l’entrepĂŽt par dĂ©faut Ă  utiliser. AprĂšs vous ĂȘtre connectĂ©, vous pouvez utiliser USE WAREHOUSE pour modifier l’entrepĂŽt.

passcode_in_password

False par dĂ©faut. DĂ©finissez cette valeur si True si le code d’accĂšs MFA (authentification multi-facteurs) est intĂ©grĂ© dans le mot de passe de connexion.

passcode

Le code d’accùs fourni par Duo lorsque vous utilisez MFA (authentification multifactorielle) pour vous connecter.

private_key

La clĂ© privĂ©e utilisĂ©e pour l’authentification. Pour plus d’informations, voir Utilisation de l’authentification par paire de clĂ©s et rotation de paires de clĂ©s.

private_key_file

SpĂ©cifie le chemin d’accĂšs au fichier de clĂ© privĂ©e pour l’utilisateur spĂ©cifiĂ©. Voir Utilisation de l’authentification par paire de clĂ©s et rotation de paires de clĂ©s.

private_key_file_pwd

SpĂ©cifie la phrase secrĂšte qui dĂ©chiffre le fichier de clĂ© privĂ©e pour l’utilisateur spĂ©cifiĂ©. Voir Utilisation de l’authentification par paire de clĂ©s et rotation de paires de clĂ©s.

autocommit

None par défaut, qui honore le paramÚtre Snowflake AUTOCOMMIT. Définissez la valeur sur True ou False pour activer ou désactiver le mode de validation automatique dans la session.

client_prefetch_threads

Nombre de threads utilisĂ©s pour tĂ©lĂ©charger les jeux de rĂ©sultats (4 par dĂ©faut). L’augmentation de la valeur amĂ©liore les performances d’extraction mais nĂ©cessite davantage de mĂ©moire.

client_session_keep_alive

DĂ©finissez cette valeur sur True pour que la session reste active indĂ©finiment. Lors de la dĂ©finition de True, assurez-vous d’appeler la mĂ©thode close pour terminer correctement le thread ou le processus risque de se bloquer. La valeur par dĂ©faut dĂ©pend de la version du connecteur que vous utilisez :

  • Version 2.4.6 et ultĂ©rieure : None par dĂ©faut. . Lorsque la valeur est None, le paramĂštre de session CLIENT_SESSION_KEEP_ALIVE est prioritaire. . . Pour remplacer le paramĂštre de session, passez True ou False pour cet argument.

  • **Version 2.4.5 et antĂ©rieure : ** False par dĂ©faut. . Lorsque la valeur est False (soit en spĂ©cifiant explicitement la valeur, soit en omettant l’argument), le paramĂštre de session CLIENT_SESSION_KEEP_ALIVE est prioritaire. . ..

Le passage de client_session_keep_alive=False à la méthode connect ne remplace pas la valeur TRUE du paramÚtre de session CLIENT_SESSION_KEEP_ALIVE.

login_timeout

DĂ©lai d’attente en secondes pour la connexion. Par dĂ©faut, 60 secondes. La demande de connexion abandonne aprĂšs le dĂ©lai d’attente si la rĂ©ponse HTTP est « success Â».

network_timeout

DĂ©lai d’attente en secondes pour toutes les autres opĂ©rations. Par dĂ©faut, aucun/infini. Une requĂȘte gĂ©nĂ©rale abandonne aprĂšs le dĂ©lai d’attente si la rĂ©ponse HTTP n’est pas « success Â».

ocsp_response_cache_filename

URI du fichier de cache de rĂ©ponse OCSP. Par dĂ©faut, le fichier de cache de rĂ©ponse OCSP est créé dans le rĂ©pertoire du cache :

  • Linux : ~/.cache/snowflake/ocsp_response_cache

  • macOS: ~/Library/Caches/Snowflake/ocsp_response_cache

  • Windows : %USERPROFILE%AppDataLocalSnowflakeCachesocsp_response_cache

Pour localiser le fichier dans un autre rĂ©pertoire, indiquez le chemin d’accĂšs et le nom du fichier dans l’URI (par ex. file:///tmp/my_ocsp_response_cache.txt).

authenticator

Authentificateur pour Snowflake :

  • snowflake (par dĂ©faut) pour utiliser l’authentificateur interne Snowflake.

  • externalbrowser pour vous authentifier en utilisant votre navigateur Web et Okta, AD FS, ou tout autre fournisseur d’identitĂ© conforme Ă  SAML 2.0 (IdP) qui a Ă©tĂ© dĂ©fini pour votre compte.

  • https://<nom_compte_okta>.okta.com (c.-Ă -d. le point de terminaison d’URL pour votre compte Okta) pour s’authentifier via Okta natif.

  • oauth pour vous authentifier Ă  l’aide de OAuth. Vous devez Ă©galement spĂ©cifier le paramĂštre token et dĂ©finir sa valeur sur le jeton d’accĂšs OAuth.

  • username_password_mfa pour s’authentifier avec la mise en cache du jeton MFA. Pour plus de dĂ©tails, voir Utilisation de la mise en cache des jetons MFA pour rĂ©duire le nombre d’invites lors de l’authentification — Facultatif.

  • OAUTH_AUTHORIZATION_CODE pour utiliser le flux du code d’autorisation OAuth 2.0.

  • OAUTH_CLIENT_CREDENTIALS pour utiliser le flux d’identifiants de connexion client OAuth 2.0.

Si la valeur n’est pas snowflake, les paramĂštres d’utilisateur et de mot de passe doivent ĂȘtre vos identifiants de connexion pour le IdP.

validate_default_parameters

False par dĂ©faut. Si True, alors :

  • Produire une exception si l’une des bases de donnĂ©es, l’un des schĂ©mas ou l’un des entrepĂŽts spĂ©cifiĂ©s n’existe pas.

  • Afficher un avertissement Ă  stderr si un nom d’argument non valide ou une valeur d’argument du mauvais type de donnĂ©es est transmis.

paramstyle

pyformat par défaut pour la liaison cÎté client. Spécifiez qmark ou numeric pour modifier le format des variables de liaison pour la liaison cÎté serveur.

timezone

None par défaut, qui honore le paramÚtre Snowflake TIMEZONE. Définissez un fuseau horaire valide (par exemple, America/Los_Angeles) pour définir le fuseau horaire de la session.

arrow_number_to_decimal

False par dĂ©faut, ce qui signifie que les valeurs des colonnes NUMBER sont renvoyĂ©es sous forme de nombres Ă  virgule flottante en double prĂ©cision (float64). . . DĂ©finissez cette valeur sur True pour que les valeurs des colonnes DECIMAL soient retournĂ©es sous forme de nombres dĂ©cimaux (decimal.Decimal) lors de l’appel des mĂ©thodes fetch_pandas_all() et fetch_pandas_batches(). . . Ce paramĂštre a Ă©tĂ© introduit dans la version 2.4.3 du connecteur Snowflake pour Python.

socket_timeout

DĂ©lai d’expiration en secondes pour les requĂȘtes de lecture et de connexion au niveau du socket. Pour plus d’informations, consultez Gestion des dĂ©lais d’expiration de connexion.

backoff_policy

Nom de la fonction gĂ©nĂ©ratrice qui dĂ©finit le temps d’attente entre les tentatives. Pour plus d’informations, consultez Gestion des politiques d’interruption de connexion pour les tentatives.

enable_connection_diag

S’il faut gĂ©nĂ©rer un rapport de diagnostic de connectivitĂ©. La valeur par dĂ©faut est False.

connection_diag_log_path

Chemin absolu pour l’emplacement du rapport de diagnostic. UtilisĂ© uniquement si enable_connection_diag est True. La valeur par dĂ©faut est le rĂ©pertoire temporaire par dĂ©faut de votre systĂšme d’exploitation, tel que /tmp pour Linux ou Mac.

connection_diag_allowlist_path

Chemin absolu vers un fichier JSON contenant la sortie de SYSTEM$ALLOWLIST() ou SYSTEM$ALLOWLIST_PRIVATELINK(). Obligatoire uniquement si l’utilisateur dĂ©fini dans la connexion n’a pas l’autorisation d’exĂ©cuter les fonctions de la liste d’autorisation du systĂšme ou si la connexion Ă  l’URL du compte Ă©choue.

iobound_tpe_limit

Taille des exĂ©cuteurs preprocess_tpe et postprocess threadpool (TPEs). Par dĂ©faut, la valeur est la moins Ă©levĂ©e entre le nombre de fichiers et le nombre de cƓurs de CPU.

unsafe_file_write

SpĂ©cifie les autorisations de fichiers Ă  affecter aux fichiers tĂ©lĂ©chargĂ©s Ă  partir d’une zone de prĂ©paration Ă  l’aide d’une commande GET. False (par dĂ©faut) dĂ©finit les autorisations de fichiers sur 600, ce qui signifie que seul le propriĂ©taire peut accĂ©der aux fichiers. True dĂ©finit les autorisations sur 644, ce qui donne au propriĂ©taire des autorisations de lecture et d’écriture et Ă  tous les autres des autorisations de lecture seule. Pour plus d’informations, voir TĂ©lĂ©chargement des rĂ©sultats.

oauth_client_id

Valeur de l”ID client :codenowrap: fournie par le fournisseur d’identitĂ© pour l’intĂ©gration Snowflake (mĂ©tadonnĂ©es d’intĂ©gration de sĂ©curitĂ© Snowflake).

oauth_client_secret

Valeur du secret client :codenowrap: fournie par le fournisseur d’identitĂ© pour l’intĂ©gration Snowflake (mĂ©tadonnĂ©es d’intĂ©gration de sĂ©curitĂ© Snowflake).

oauth_authorization_url

Point de terminaison du fournisseur d’identitĂ© fournissant le code d’autorisation au pilote. Lorsque vous utilisez Snowflake comme fournisseur d’identitĂ©, cette valeur est dĂ©rivĂ©e des paramĂštres server ou account.

oauth_token_request_url

Point de terminaison du fournisseur d’identitĂ© fournissant les jetons d’accĂšs au pilote. Lorsque vous utilisez Snowflake comme fournisseur d’identitĂ©, cette valeur est dĂ©rivĂ©e des paramĂštres server ou account.

oauth_scope

Champ d’application demandĂ© dans la requĂȘte d’autorisation du fournisseur d’identitĂ©. Par dĂ©faut, il est dĂ©rivĂ© du rĂŽle. Lorsque plusieurs champs d’application sont exigĂ©s, la valeur doit ĂȘtre une liste de champs d’application multiples sĂ©parĂ©s par des espaces.

oauth_redirect_uri

URI Ă  utiliser pour la redirection du code d’autorisation (mĂ©tadonnĂ©es d’intĂ©gration de sĂ©curitĂ© Snowflake). Par dĂ©faut : http://127.0.0.1:{randomAvailablePort}/.

oauth_disable_pkce:

DĂ©sactive Proof Key for Code Exchange (PKCE), une amĂ©lioration de la sĂ©curitĂ© qui garantit que mĂȘme si des attaquants malveillants interceptent un code d’autorisation, ils ne seront pas en mesure de le transformer en jeton d’accĂšs valide.

oauth_enable_refresh_token:

Permet une rĂ©authentification silencieuse lorsque le jeton d’accĂšs actuel n’est plus valable, Ă  condition qu’il soit pris en charge par le serveur d’autorisation et que client_store_temporary_credential soit dĂ©fini sur True.

oauth_enable_single_use_refresh_tokens:

Indique s’il faut choisir une sĂ©mantique de jeton d’actualisation Ă  usage unique.

Attributs¶

Error, Warning, ...

Toutes les classes d’exception dĂ©finies par la norme de l’API de base de donnĂ©es Python. Le connecteur Snowflake pour Python fournit les attributs msg, errno, sqlstate, sfqid et raw_msg.

Notes sur l’utilisation pour le paramĂštre account (pour la mĂ©thode connect)¶

Pour le paramÚtre requis account, spécifiez votre identificateur de compte.

Notez que l’identificateur du compte ne comprend pas le nom de domaine snowflakecomputing.com. Snowflake l’ajoute automatiquement lors de la crĂ©ation de la connexion.

L’exemple suivant utilise le nom de compte comme identificateur pour le compte myaccount dans l’organisation myorganization.

ctx = snowflake.connector.connect(
    user='<user_name>',
    password='<password>',
    account='myorganization-myaccount',
    ... )
Copy

L’exemple suivant utilise le localisateur de compte xy12345 comme identifiant de compte :

ctx = snowflake.connector.connect(
    user='<user_name>',
    password='<password>',
    account='xy12345',
    ... )
Copy

Notez que cet exemple utilise un compte dans la rĂ©gion AWS US Ouest (Oregon). Si le compte se trouve dans une autre rĂ©gion ou s’il utilise un autre fournisseur Cloud, vous devez spĂ©cifier des segments supplĂ©mentaires aprĂšs le localisateur de compte.

Objet : Connection¶

Un objet Connection contient les informations de connexion et de session visant Ă  garder la connexion de base de donnĂ©es active. S’il est fermĂ© ou si la session expire, toutes les opĂ©rations suivantes Ă©choueront.

Méthodes¶

autocommit(True|False)¶
But:

Active ou désactive le mode de validation automatique. Par défaut, la validation automatique est activée (True).

close()¶
But:

Ferme la connexion. Si une transaction est encore ouverte lorsque la connexion est fermée, les modifications sont annulées.

La fermeture de la connexion supprime explicitement la session active du serveur. Sinon, la session active continue jusqu’à ce qu’elle soit finalement purgĂ©e du serveur, limitant ainsi le nombre de requĂȘtes simultanĂ©es.

Par exemple :

# context manager ensures the connection is closed
with snowflake.connector.connect(...) as con:
    con.cursor().execute(...)

# try & finally to ensure the connection is closed.
con = snowflake.connector.connect(...)
try:
    con.cursor().execute(...)
finally:
    con.close()
Copy
commit()¶
But:

Si la validation automatique est désactivée, valide la transaction en cours. Si la validation automatique est activée, cette méthode est ignorée.

rollback()¶
But:

Si la validation automatique est désactivée, la transaction en cours est annulée. Si la validation automatique est activée, cette méthode est ignorée.

cursor()¶
But:

Constructeur pour créer un objet Cursor. Les valeurs de retour des appels fetch*() sont une seule séquence ou une liste de séquences.

cursor(snowflake.connector.DictCursor)
But:

Constructeur pour crĂ©er un objet DictCursor. Les valeurs de retour des appels fetch*() sont un dict unique ou une liste d’objets dict. Ceci est utile pour rĂ©cupĂ©rer les valeurs par nom de colonne Ă  partir des rĂ©sultats.

execute_string(sql_text, remove_comments=False, return_cursors=True)¶
But:

ExĂ©cutez une ou plusieurs instructions SQL passĂ©es sous forme de chaĂźnes. Si remove_comments est dĂ©fini sur True, les commentaires sont supprimĂ©s de la requĂȘte. Si return_cursors est dĂ©fini sur True, cette mĂ©thode retourne une sĂ©quence d’objets Cursor dans l’ordre d’exĂ©cution.

Exemple:

Cet exemple montre l’exĂ©cution de plusieurs commandes dans une seule chaĂźne, puis l’utilisation de la sĂ©quence de curseurs qui est retournĂ©e :

cursor_list = connection1.execute_string(
    "SELECT * FROM testtable WHERE col1 LIKE 'T%';"
    "SELECT * FROM testtable WHERE col2 LIKE 'A%';"
    )

for cursor in cursor_list:
   for row in cursor:
      print(row[0], row[1])
Copy

Note

Les mĂ©thodes telles que execute_string() qui permettent de multiples instructions SQL dans une seule chaĂźne sont vulnĂ©rables aux attaques par injection SQL. Évitez d’utiliser la concatĂ©nation de chaĂźnes, ou des fonctions telles que la fonction format() de Python pour composer dynamiquement une instruction SQL en combinant SQL avec des donnĂ©es d’utilisateur, Ă  moins que vous n’ayez validĂ© les donnĂ©es d’utilisateur. L’exemple ci-dessous illustre le problĂšme :

# "Binding" data via the format() function (UNSAFE EXAMPLE)
value1_from_user = "'ok3'); DELETE FROM testtable WHERE col1 = 'ok1'; select pi("
sql_cmd = "insert into testtable(col1) values('ok1'); "                  \
          "insert into testtable(col1) values('ok2'); "                  \
          "insert into testtable(col1) values({col1});".format(col1=value1_from_user)
# Show what SQL Injection can do to a composed statement.
print(sql_cmd)

connection1.execute_string(sql_cmd)
Copy

L’instruction Ă  composition dynamique ressemble Ă  la suivante (de nouvelles lignes ont Ă©tĂ© ajoutĂ©es pour faciliter la lecture) :

insert into testtable(col1) values('ok1');
insert into testtable(col1) values('ok2');
insert into testtable(col1) values('ok3');
DELETE FROM testtable WHERE col1 = 'ok1';
select pi();
Copy

Si vous combinez des instructions SQL avec des chaßnes entrées par des utilisateurs non fiables, alors il est plus sûr de lier des données à une instruction que de composer une chaßne. La méthode execute_string() ne prend pas de paramÚtres de liaison. Pour lier des paramÚtres, utilisez Cursor.execute() ou Cursor.executemany().

execute_stream(sql_stream, remove_comments=False)¶
But:

ExĂ©cutez une ou plusieurs instructions SQL passĂ©es comme objet de flux. Si remove_comments est dĂ©fini sur True, les commentaires sont supprimĂ©s de la requĂȘte. Ce gĂ©nĂ©rateur produit chaque objet Cursor au fur et Ă  mesure que les instructions SQL s’exĂ©cutent.

Si sql_stream se termine par des lignes de commentaires, vous devez donner Ă  remove_comments la valeur True, comme suit :

sql_script = """
-- This is first comment line;
select 1;
select 2;
-- This is comment in middle;
-- With some extra comment lines;
select 3;
-- This is the end with last line comment;
"""
sql_stream = StringIO(sql_script)
with con.cursor() as cur:
        for result_cursor in con.execute_stream(sql_stream,remove_comments=True):
            for result in result_cursor:
                print(f"Result: {result}")
Copy
get_query_status(query_id)¶
But:

Renvoie le statut d’une requĂȘte.

ParamĂštres:

query_id

Renvoie:

Renvoie l’objet QueryStatus qui reprĂ©sente le statut de la requĂȘte.

Exemple:

Voir VĂ©rification du statut d’une requĂȘte.

get_query_status_throw_if_error(query_id)¶
But:

Renvoie le statut d’une requĂȘte. Si la requĂȘte aboutit Ă  une erreur, cette mĂ©thode gĂ©nĂšre un ProgrammingError (comme le ferait la mĂ©thode execute() ).

ParamĂštres:

query_id

Renvoie:

Renvoie l’objet QueryStatus qui reprĂ©sente le statut de la requĂȘte.

Exemple:

Voir VĂ©rification du statut d’une requĂȘte.

is_valid()¶
But:

Renvoie True si la connexion est suffisamment stable pour recevoir des requĂȘtes.

is_still_running(query_status)¶
But:

Renvoie True si le statut de la requĂȘte indique que la requĂȘte n’est pas encore terminĂ©e ou est toujours en cours.

ParamĂštres:

query_status

L’objet QueryStatus qui reprĂ©sente le statut de la requĂȘte. Pour obtenir cet objet pour une requĂȘte, voir VĂ©rification du statut d’une requĂȘte.

Exemple:

Voir VĂ©rification du statut d’une requĂȘte.

is_an_error(query_status)¶
But:

Renvoie True si le statut de la requĂȘte indique que la requĂȘte a abouti Ă  une erreur.

ParamĂštres:

query_status

L’objet QueryStatus qui reprĂ©sente le statut de la requĂȘte. Pour obtenir cet objet pour une requĂȘte, voir VĂ©rification du statut d’une requĂȘte.

Exemple:

Voir VĂ©rification du statut d’une requĂȘte.

Attributs¶

expired¶

Vérifie si le jeton maßtre de la connexion a expiré.

messages¶

L’objet de liste comprenant des sĂ©quences (classe d’exception, valeur d’exception) pour tous les messages reçus depuis la base de donnĂ©es sous-jacente pour cette connexion.

La liste est automatiquement effacĂ©e par n’importe quel appel de mĂ©thode.

errorhandler¶

Attribut de lecture/d’écriture faisant rĂ©fĂ©rence Ă  un gestionnaire d’erreur Ă  appeler en cas de condition d’erreur.

Ce gestionnaire doit ĂȘtre un appelable Python acceptant les arguments suivants :

errorhandler(connection, cursor, errorclass, errorvalue)

Error, Warning, ...

Toutes les classes d’exception dĂ©finies par la norme de l’API de base de donnĂ©es Python.

Objet : Cursor¶

Un objet Cursor représente un curseur de base de données pour exécuter et récupérer des opérations. Chaque curseur a ses propres attributs, description et rowcount, de sorte que les curseurs sont isolés.

Méthodes¶

close()
But:

Ferme l’objet de curseur.

describe(command [, parameters][, timeout][, file_stream])¶
But:

Renvoie des mĂ©tadonnĂ©es sur le jeu de rĂ©sultats sans exĂ©cuter une commande de base de donnĂ©es. Cela renvoie les mĂȘmes mĂ©tadonnĂ©es que celles disponibles dans l’attribut description aprĂšs l’exĂ©cution d’une requĂȘte.

Cette méthode a été introduite dans la version 2.4.6 du connecteur Snowflake pour Python.

ParamĂštres:

Voir les paramÚtres de la méthode execute().

Renvoie:

Renvoie une liste d’objets ResultMetadata qui dĂ©crivent les colonnes dans le jeu de rĂ©sultats.

Exemple:

Voir Récupération de métadonnées de colonne.

execute(command [, parameters][, timeout][, file_stream])¶
But:

Prépare et exécute une commande de base de données.

ParamĂštres:

command

Une chaĂźne contenant l’instruction SQL Ă  exĂ©cuter.

parameters

(Facultatif) Si vous avez utilisĂ© des paramĂštres pour lier des donnĂ©es dans l’instruction SQL, dĂ©finissez ce paramĂštre comme la liste ou le dictionnaire des variables qui doivent ĂȘtre liĂ©es Ă  ces paramĂštres.

Pour plus d’informations sur le mappage des types de donnĂ©es Python pour les variables aux types de donnĂ©es SQL des colonnes correspondantes, voir Mappages de type de donnĂ©e pour les liaisons qmark et numeric.

timeout

(Facultatif) Nombre de secondes Ă  attendre pour que la requĂȘte se termine. Si la requĂȘte n’est pas terminĂ©e au bout de ce temps, elle doit ĂȘtre interrompue.

file_stream

(Facultatif) Lors de l’exĂ©cution d’une commande PUT, vous pouvez utiliser ce paramĂštre pour tĂ©lĂ©charger un objet de type fichier en mĂ©moire (par exemple, l’objet E/S renvoyĂ© par la fonction Python open()), plutĂŽt qu’un fichier sur le systĂšme de fichiers. DĂ©finissez ce paramĂštre sur cet objet d’E/S.

Lorsque vous spĂ©cifiez l’URI pour le fichier de donnĂ©es dans la commande PUT :

  • Vous pouvez utiliser n’importe quel chemin de rĂ©pertoire. Le chemin de rĂ©pertoire que vous spĂ©cifiez dans l’URI est ignorĂ©.

  • Pour le nom de fichier, indiquez le nom du fichier qui doit ĂȘtre créé sur la zone de prĂ©paration.

Par exemple, pour tĂ©lĂ©charger un fichier depuis un flux de fichiers vers un fichier nommĂ© :

@mystage/myfile.csv
Copy

utilisez l’appel suivant :

cursor.execute(
    "PUT file://this_directory_path/is_ignored/myfile.csv @mystage",
    file_stream=<io_object>)
Copy
Renvoie:

Renvoie la rĂ©fĂ©rence d’un objet Cursor.

executemany(command, seq_of_parameters)¶
But:

PrĂ©pare une commande de base de donnĂ©es et l’exĂ©cute selon toutes les sĂ©quences de paramĂštres trouvĂ©es dans seq_of_parameters. Vous pouvez utiliser cette mĂ©thode pour effectuer une opĂ©ration d’insertion par lots.

ParamĂštres:

command

La commande est une chaĂźne contenant le code Ă  exĂ©cuter. La chaĂźne doit contenir un ou plusieurs espaces rĂ©servĂ©s (comme des points d’interrogation) pour DonnĂ©es de liaison.

Par exemple :

"insert into testy (v1, v2) values (?, ?)"
Copy

seq_of_parameters

Il doit s’agir d’une sĂ©quence (liste ou tuple) de listes ou de tuples. Voir l’exemple de code ci-dessous pour les sĂ©quences d’exemple.

Renvoie:

Renvoie la rĂ©fĂ©rence d’un objet Cursor.

Exemple:
# This example uses qmark (question mark) binding, so
# you must configure the connector to use this binding style.
from snowflake import connector
connector.paramstyle='qmark'

stmt1 = "create table testy (V1 varchar, V2 varchar)"
cs.execute(stmt1)

# A list of lists
sequence_of_parameters1 = [ ['Smith', 'Ann'], ['Jones', 'Ed'] ]
# A tuple of tuples
sequence_of_parameters2 = ( ('Cho', 'Kim'), ('Cooper', 'Pat') )

stmt2 = "insert into testy (v1, v2) values (?, ?)"
cs.executemany(stmt2, sequence_of_parameters1)
cs.executemany(stmt2, sequence_of_parameters2)
Copy

En interne, plusieurs méthodes execute sont appelées et le jeu de résultats du dernier appel execute sera conservé.

Note

La mĂ©thode executemany ne peut ĂȘtre utilisĂ©e que pour exĂ©cuter une seule instruction SQL paramĂ©trĂ©e et lui passer plusieurs valeurs de liaison.

L’exĂ©cution de plusieurs instructions SQL sĂ©parĂ©es par un point-virgule dans un appel execute n’est pas prise en charge. À la place, Ă©mettez un appel execute distinct pour chaque instruction.

execute_async(...)¶
But:

PrĂ©pare et soumet une commande de base de donnĂ©es pour une exĂ©cution asynchrone. Voir ExĂ©cution d’une requĂȘte asynchrone.

ParamĂštres:

Cette mĂ©thode utilise les mĂȘmes paramĂštres que la mĂ©thode execute() .

Renvoie:

Renvoie la rĂ©fĂ©rence d’un objet Cursor.

Exemple:

Voir Exemples de requĂȘtes asynchrones.

fetch_arrow_all()¶
But:

Cette mĂ©thode rĂ©cupĂšre toutes les lignes d’un curseur et les charge dans une table PyArrow.

ParamĂštres:

Aucun.

Renvoie:

Renvoie une table PyArrow contenant toutes les lignes du jeu de résultats.

S’il n’y a pas de lignes, cela renvoie Aucun.

Exemple:

Voir Distribution de charges de travail qui récupÚrent des résultats avec le connecteur Snowflake pour Python.

fetch_arrow_batches()¶
But:

Cette méthode récupÚre un sous-ensemble des lignes dans un curseur et les délivre à une table PyArrow.

ParamĂštres:

Aucun.

Renvoie:

Renvoie une table PyArrow contenant un sous-ensemble des lignes du jeu de résultats.

Renvoie Aucun s’il n’y a plus de lignes Ă  rĂ©cupĂ©rer.

Exemple:

Voir Distribution de charges de travail qui récupÚrent des résultats avec le connecteur Snowflake pour Python.

get_result_batches()¶
But:

Renvoie une liste d’objets ResultBatch que vous pouvez utiliser pour extraire un sous-ensemble de lignes du jeu de rĂ©sultats.

ParamĂštres:

Aucun.

Renvoie:

Renvoie une liste d’objets ResultBatch ou None si l’exĂ©cution de la requĂȘte n’est pas terminĂ©e.

Exemple:

Voir Distribution de charges de travail qui récupÚrent des résultats avec le connecteur Snowflake pour Python.

get_results_from_sfqid(query_id)¶
But:

RĂ©cupĂšre les rĂ©sultats d’une requĂȘte asynchrone ou d’une requĂȘte synchrone prĂ©cĂ©demment soumise.

ParamĂštres:

query_id

Exemple:

Voir Utilisation de l’ID de requĂȘte pour rĂ©cupĂ©rer les rĂ©sultats d’une requĂȘte.

fetchone()¶
But:

RĂ©cupĂšre la prochaine ligne d’un jeu de rĂ©sultats de requĂȘte et renvoie une sĂ©quence/un dict unique ou None lorsqu’aucune donnĂ©e n’est disponible.

fetchmany([size=cursor.arraysize])¶
But:

RĂ©cupĂšre les prochaines lignes d’un ensemble de rĂ©sultats de requĂȘte et renvoie une liste de sĂ©quences/de dicts. Une sĂ©quence vide est retournĂ©e lorsqu’il n’y a plus de lignes disponibles.

fetchall()¶
But:

RĂ©cupĂšre toutes les lignes d’un ensemble de rĂ©sultats de requĂȘte, ou celles restantes, et renvoie une liste de sĂ©quences/de dicts.

fetch_pandas_all()¶
But:

Cette mĂ©thode rĂ©cupĂšre toutes les lignes d’un curseur et les charge dans un DataFrame Pandas.

ParamĂštres:

Aucun.

Renvoie:

Renvoie un DataFrame contenant toutes les lignes de l’ensemble de rĂ©sultats.

Pour plus d’informations sur les cadres de donnĂ©es pandas, consultez la documentation DataFrame pandas.

S’il n’y a pas de lignes, cela renvoie None.

Notes sur l’utilisation:
  • Cette mĂ©thode n’est pas un remplacement complet de la mĂ©thode read_sql() de pandas ; cette mĂ©thode consiste Ă  fournir un moyen rapide de rĂ©cupĂ©rer des donnĂ©es Ă  partir d’une requĂȘte SELECT et de stocker les donnĂ©es dans un DataFrame pandas.

  • Actuellement, cette mĂ©thode ne fonctionne que pour les instructions SELECT.

Exemples:
ctx = snowflake.connector.connect(
          host=host,
          user=user,
          password=password,
          account=account,
          warehouse=warehouse,
          database=database,
          schema=schema,
          protocol='https',
          port=port)

# Create a cursor object.
cur = ctx.cursor()

# Execute a statement that will generate a result set.
sql = "select * from t"
cur.execute(sql)

# Fetch the result set from the cursor and deliver it as the pandas DataFrame.
df = cur.fetch_pandas_all()

# ...
Copy
fetch_pandas_batches()¶
But:

Cette méthode récupÚre un sous-ensemble des lignes dans un curseur et les délivre à un DataFrame Pandas.

ParamĂštres:

Aucun.

Renvoie:

Renvoie un DataFrame contenant un sous-ensemble des lignes de l’ensemble de rĂ©sultats.

Pour plus d’informations sur les cadres de donnĂ©es pandas, consultez la documentation DataFrame pandas.

Renvoie None s’il n’y a plus de lignes Ă  rĂ©cupĂ©rer.

Notes sur l’utilisation:
  • Selon le nombre de lignes dans le jeu de rĂ©sultats, ainsi que le nombre de lignes spĂ©cifiĂ©es dans l’appel de mĂ©thode, la mĂ©thode peut avoir besoin d’ĂȘtre appelĂ©e plus d’une fois, ou elle peut renvoyer toutes les lignes dans un seul lot si elles correspondent toutes.

  • Cette mĂ©thode n’est pas un remplacement complet de la mĂ©thode read_sql() de pandas ; cette mĂ©thode consiste Ă  fournir un moyen rapide de rĂ©cupĂ©rer des donnĂ©es Ă  partir d’une requĂȘte SELECT et de stocker les donnĂ©es dans un DataFrame pandas.

  • Actuellement, cette mĂ©thode ne fonctionne que pour les instructions SELECT.

Exemples:
ctx = snowflake.connector.connect(
          host=host,
          user=user,
          password=password,
          account=account,
          warehouse=warehouse,
          database=database,
          schema=schema,
          protocol='https',
          port=port)

# Create a cursor object.
cur = ctx.cursor()

# Execute a statement that will generate a result set.
sql = "select * from t"
cur.execute(sql)

# Fetch the result set from the cursor and deliver it as the pandas DataFrame.
for df in cur.fetch_pandas_batches():
    my_dataframe_processing_function(df)

# ...
Copy
__iter__()¶

Se retourne pour rendre les curseurs compatibles avec le protocole d’itĂ©ration.

Attributs¶

description¶

Attribut en lecture seule qui renvoie des métadonnées sur les colonnes du jeu de résultats.

Cet attribut est dĂ©fini aprĂšs avoir appelĂ© la mĂ©thode execute() pour exĂ©cuter la requĂȘte. (Dans la version 2.4.6 ou ultĂ©rieure, vous pouvez rĂ©cupĂ©rer ces mĂ©tadonnĂ©es sans exĂ©cuter la requĂȘte en appelant la mĂ©thode describe()).

Cet attribut a l’une des valeurs suivantes :

  • Versions 2.4.5 et antĂ©rieures : cet attribut est dĂ©fini sur une liste de tuples.

  • Versions 2.4.6 et ultĂ©rieures : cet attribut est dĂ©fini sur une liste d’objets ResultMetadata.

Chaque tuple ou objet ResultMetadata contient les mĂ©tadonnĂ©es qui dĂ©crivent une colonne dans le jeu de rĂ©sultats. Vous pouvez accĂ©der aux mĂ©tadonnĂ©es par index ou, dans les versions 2.4.6 et ultĂ©rieures, par attribut d’objet ResultMetadata :

Indice de valeur

Attribut ResultMetadata

Description

0

name

Nom de colonne.

1

type_code

Code de type interne.

2

display_size

(Non utilisé. Identique à internal_size.)

3

internal_size

Taille des données internes.

4

precision

Précision des données numériques.

5

scale

Échelle pour les donnĂ©es numĂ©riques.

6

is_nullable

True si des valeurs NULL sont autorisées pour la colonne ou False.

Pour des exemples d’obtention de cet attribut, voir RĂ©cupĂ©ration de mĂ©tadonnĂ©es de colonne.

rowcount¶

Attribut en lecture seule qui retourne le nombre de lignes dans le dernier execute produit. La valeur est -1 ou None si aucun execute n’est exĂ©cutĂ©.

sfqid¶

Attribut en lecture seule qui renvoie l’ID de requĂȘte Snowflake dans le dernier execute ou execute_async exĂ©cutĂ©.

arraysize¶

Attribut de lecture/d’écriture indiquant le nombre de lignes Ă  rĂ©cupĂ©rer Ă  un certain moment avec fetchmany(). Par dĂ©faut, 1 signifie rĂ©cupĂ©rer une seule ligne Ă  la fois.

connection¶

Attribut en lecture seule qui renvoie une rĂ©fĂ©rence Ă  l’objet Connection sur lequel le curseur a Ă©tĂ© créé.

messages

Objet de liste qui inclut les sĂ©quences (classe d’exception, valeur d’exception) pour tous les messages qu’il a reçus de la base de donnĂ©es sous-jacente pour le curseur.

La liste est effacĂ©e automatiquement par n’importe quel appel de mĂ©thode Ă  l’exception des appels fetch*().

errorhandler

Attribut de lecture/d’écriture faisant rĂ©fĂ©rence Ă  un gestionnaire d’erreur Ă  appeler en cas de condition d’erreur.

Ce gestionnaire doit ĂȘtre un appelable Python acceptant les arguments suivants :

errorhandler(connection, cursor, errorclass, errorvalue)

Codes de type¶

Dans l’objet Cursor, l’attribut description et la mĂ©thode describe() fournissent une liste de tuples (ou, dans les versions 2.4.6 et ultĂ©rieures, d’objets ResultMetadata) qui dĂ©crivent les colonnes dans le jeu de rĂ©sultats.

Dans un tuple, la valeur au niveau de l’indice 1 (l’attribut type_code dans l’objet ResultMetadata) reprĂ©sente le type de donnĂ©es de la colonne. Le connecteur Snowflake pour Python utilise la carte suivante pour obtenir la reprĂ©sentation de la chaĂźne, en fonction du code de type :

type_code

Représentation de chaßne

Type de données

0

FIXED

NUMBER/INT

1

REAL

REAL

2

TEXT

VARCHAR/STRING

3

DATE

DATE

4

TIMESTAMP

TIMESTAMP

5

VARIANT

VARIANT

6

TIMESTAMP_LTZ

TIMESTAMP_LTZ

7

TIMESTAMP_TZ

TIMESTAMP_TZ

8

TIMESTAMP_NTZ

TIMESTAMP_TZ

9

OBJECT

OBJECT

10

ARRAY

ARRAY

11

BINARY

BINARY

12

TIME

TIME

13

BOOLEAN

BOOLEAN

14

GEOGRAPHY

GEOGRAPHY

15

GEOMETRY

GEOMETRY

16

VECTOR

VECTOR

Mappages de type de donnée pour les liaisons qmark et numeric¶

Si paramstyle est "qmark" ou "numeric", les mappages suivants par dĂ©faut de Python vers le type de donnĂ©es Snowflake sont utilisĂ©s :

Type de données Python

Type de données dans Snowflake

int

NUMBER(38, 0)

long

NUMBER(38, 0)

decimal

NUMBER(38, <échelle>)

float

REAL

str

TEXT

unicode

TEXT

bytes

BINARY

bytearray

BINARY

bool

BOOLEAN

date

DATE

time

TIME

timedelta

TIME

datetime

TIMESTAMP_NTZ

struct_time

TIMESTAMP_NTZ

Si vous devez mapper un autre type Snowflake (p. ex. datetime à TIMESTAMP_LTZ), spécifiez le type de données Snowflake dans un tuple composé du type de données Snowflake suivi de la valeur. Voir Liaison de datetime avec TIMESTAMP pour des exemples.

Objet : Exception¶

PEP-249 dĂ©finit les exceptions que le Snowflake Connector pour Python peut faire en cas d’erreur ou d’avertissement. L’application doit les traiter correctement et dĂ©cider de continuer ou d’arrĂȘter l’exĂ©cution du code.

Pour plus d’informations, voir la documentation PEP-249.

Méthodes¶

Aucune mĂ©thode n’est disponible pour les objets Exception.

Attributs¶

errno¶

Code d’erreur DB Snowflake.

msg¶

Message d’erreur incluant le code d’erreur, le code d’état SQL et l’ID de requĂȘte.

raw_msg¶

Message d’erreur. Aucun code d’erreur, de code d’état SQL ou d’ID de requĂȘte n’est inclus.

sqlstate¶

Code d’état SQL conforme Ă  ANSI

sfqid

ID de requĂȘte Snowflake.

Objet ResultBatch¶

Un objet ResultBatch encapsule une fonction qui rĂ©cupĂšre un sous-ensemble de lignes d’un jeu de rĂ©sultats. Pour rĂ©partir le travail de rĂ©cupĂ©ration des rĂ©sultats entre plusieurs employĂ©s ou nƓuds, vous pouvez appeler la mĂ©thode get_result_batches() dans l’objet Curseur pour rĂ©cupĂ©rer une liste d’objets ResultBatch et distribuer ces objets Ă  diffĂ©rents employĂ©s ou nƓuds pour traitement.

Attributs¶

rowcount¶

Attribut en lecture seule qui retourne le nombre de lignes dans le lot de résultats.

compressed_size¶

Attribut en lecture seule qui renvoie la taille des données (une fois compressées) dans le lot de résultats.

uncompressed_size¶

Attribut en lecture seule qui renvoie la taille des données (non compressées) dans le lot de résultats.

Méthodes¶

to_arrow()¶
But:

Cette mĂ©thode renvoie une table PyArrow contenant les lignes de l’objet ResultBatch.

ParamĂštres:

Aucun.

Renvoie:

Renvoie une table PyArrow contenant les lignes de l’objet ResultBatch.

S’il n’y a pas de lignes, cela renvoie Aucun.

to_pandas()¶
But:

Cette mĂ©thode renvoie un DataFrame Pandas contenant les lignes de l’objet ResultBatch.

ParamĂštres:

Aucun.

Renvoie:

Retourne un DataFrame Pandas contenant les lignes de l’objet ResultBatch.

S’il n’y a pas de lignes, cela renvoie un DataFrame Pandas vide.

Objet : ResultMetadata¶

Un objet ResultMetadata reprĂ©sente les mĂ©tadonnĂ©es d’une colonne dans le jeu de rĂ©sultats. Une liste de ces objets est renvoyĂ©e par l’attribut description et la mĂ©thode describe de l’objet Cursor.

Cet objet a été introduit dans la version 2.4.6 du connecteur Snowflake pour Python.

Méthodes¶

Aucun.

Attributs¶

name¶

Nom de la colonne

type_code¶

Code de type interne.

display_size¶

Non utilisé. Identique à internal_size.

internal_size¶

Taille des données internes.

precision¶

Précision des données numériques.

scale¶

Échelle pour les donnĂ©es numĂ©riques.

is_nullable¶

True si des valeurs NULL sont autorisées pour la colonne ou False.

Module : snowflake.connector.constants¶

Le module snowflake.connector.constants dĂ©finit les constantes utilisĂ©es dans l” API.

Enums¶

class QueryStatus¶

ReprĂ©sente le statut d’une requĂȘte asynchrone. Cette Ă©numĂ©ration a les constantes suivantes :

Constante Enum

Description

RUNNING

La requĂȘte est toujours en cours d’exĂ©cution.

ABORTING

La requĂȘte est en cours d’annulation cĂŽtĂ© serveur.

SUCCESS

La requĂȘte s’est terminĂ©e avec succĂšs.

FAILED_WITH_ERROR

La requĂȘte s’est terminĂ©e avec une erreur.

QUEUED

La requĂȘte est mise en file d’attente pour exĂ©cution (c’est-Ă -dire qu’elle n’est pas encore exĂ©cutĂ©e), gĂ©nĂ©ralement parce qu’elle attend des ressources.

DISCONNECTED

La connexion de la session est interrompue. L’état de la requĂȘte basculera bientĂŽt sur « FAILED_WITH_ERROR Â».

RESUMING_WAREHOUSE

L’entrepĂŽt dĂ©marre et la requĂȘte n’est pas encore en cours d’exĂ©cution.

BLOCKED

L’instruction attend un verrou dĂ©tenu par une autre instruction.

NO_DATA

Les donnĂ©es sur l’instruction ne sont pas encore disponibles, gĂ©nĂ©ralement parce que l’instruction n’est pas encore exĂ©cutĂ©e.

Module : snowflake.connector.pandas_tools¶

Le module snowflake.connector.pandas_tools fournit des fonctions pour travailler avec la bibliothĂšque d’analyse de donnĂ©es pandas.

Pour plus d’informations, consultez la documentation sur la bibliothĂšque d’analyse de donnĂ©es pandas.

Fonctions¶

write_pandas(parameters...)¶
But:

Écrit un DataFrame Pandas dans une table dans une base de donnĂ©es Snowflake.

Pour écrire les données dans la table, la fonction enregistre les données dans des fichiers Parquet, utilise la commande PUT pour télécharger ces fichiers dans une zone de préparation temporaire et utilise la commande COPY INTO <table> pour copier les données des fichiers dans la table. Vous pouvez utiliser certains des paramÚtres de fonction pour contrÎler la façon dont les instructions PUT et COPY INTO <table> sont exécutées.

ParamĂštres:

Les paramĂštres d’entrĂ©e valides sont :

ParamĂštre

Obligatoire

Description

conn

Oui

objet Connection contenant la connexion à la base de données Snowflake.

df

Oui

Objet pandas.DataFrame contenant les données à copier dans la table.

table_name

Oui

Nom de la table dans laquelle les donnĂ©es doivent ĂȘtre copiĂ©es.

database

Nom de la base de donnĂ©es contenant la table. Par dĂ©faut, la fonction Ă©crit dans la base de donnĂ©es actuellement utilisĂ©e dans la session. Remarque : si vous spĂ©cifiez ce paramĂštre, vous devez Ă©galement spĂ©cifier le paramĂštre schema.

schema

Nom du schéma contenant la table. Par défaut, la fonction écrit dans la table du schéma actuellement utilisé dans la session.

chunk_size

Nombre d’élĂ©ments Ă  insĂ©rer simultanĂ©ment. Par dĂ©faut, la fonction insĂšre tous les Ă©lĂ©ments Ă  la fois dans un seul bloc.

compression

L’algorithme de compression Ă  utiliser pour les fichiers Parquet. Vous pouvez spĂ©cifier "gzip" pour une meilleure compression ou "snappy" pour une compression plus rapide. Par dĂ©faut, la fonction utilise "gzip".

on_error

SpĂ©cifie comment les erreurs doivent ĂȘtre gĂ©rĂ©es. DĂ©finissez ce paramĂštre sur l’une des valeurs de chaĂźne documentĂ©es dans ON_ERROR l’option de copie. Par dĂ©faut, la fonction utilise "ABORT_STATEMENT".

parallel

Nombre de threads à utiliser lors du téléchargement des fichiers Parquet vers la zone de préparation temporaire. Pour le nombre par défaut de threads utilisés et les instructions sur comment choisir le nombre de threads, voir le paramÚtre parallÚle de la commande PUT.

quote_identifiers

Si False, empĂȘche le connecteur d” entrer des guillemets doubles autour des identificateurs avant d’envoyer les identificateurs au serveur. Par dĂ©faut, le connecteur place des guillemets doubles autour des identificateurs.

Renvoie:

Renvoie un tuple de (success, num_chunks, num_rows, output) oĂč :

  • success est True si la fonction a correctement Ă©crit les donnĂ©es dans la table.

  • num_chunks est le nombre de blocs de donnĂ©es que la fonction a copiĂ©s.

  • num_rows est le nombre de lignes insĂ©rĂ©es par la fonction.

  • output est la sortie de la commande COPY INTO <table>.

Exemple:

L’exemple suivant Ă©crit les donnĂ©es d’un DataFrame Pandas dans la table nommĂ©e « customers Â» (clients).

import pandas
from snowflake.connector.pandas_tools import write_pandas

# Create the connection to the Snowflake database.
cnx = snowflake.connector.connect(...)

# Create a DataFrame containing data about customers
df = pandas.DataFrame([('Mark', 10), ('Luke', 20)], columns=['name', 'balance'])

# Write the data from the DataFrame to the table named "customers".
success, nchunks, nrows, _ = write_pandas(cnx, df, 'customers')
Copy
pd_writer(parameters...)¶
But:

pd_writer est une mĂ©thode d’insertion permettant d’insĂ©rer des donnĂ©es dans une base de donnĂ©es Snowflake.

Lorsque vous appelez pandas.DataFrame.to_sql, transfĂ©rez method=pd_writer pour indiquer que vous voulez utiliser pd_writer comme mĂ©thode d’insertion de donnĂ©es. (Vous n’avez pas besoin d’appeler pd_writer Ă  partir de votre propre code. La mĂ©thode to_sql appelle pd_writer et fournit les paramĂštres d’entrĂ©e nĂ©cessaires.)

Pour plus d’informations, voir :

Note

Veuillez noter que lorsque les noms de colonnes dans les DataFrame pandas ne contiennent que des lettres minuscules, vous devez entourer les noms de colonnes de guillemets doubles, sinon le connecteur lĂšve une ProgrammingError.

La bibliothĂšque snowflake-sqlalchemy ne met pas entre guillemets les noms de colonnes en minuscules lors de la crĂ©ation d’une table, tandis que pd_writer met en guillemets les noms de colonnes par dĂ©faut. Le problĂšme vient du fait que la commande COPY INTO s’attend Ă  ce que les noms de colonnes soient mis entre guillemets.

Des améliorations seront apportées à la bibliothÚque snowflake-sqlalchemy.

Par exemple :

import pandas as pd
from snowflake.connector.pandas_tools import pd_writer

sf_connector_version_df = pd.DataFrame([('snowflake-connector-python', '1.0')], columns=['NAME', 'NEWEST_VERSION'])

# Specify that the to_sql method should use the pd_writer function
# to write the data from the DataFrame to the table named "driver_versions"
# in the Snowflake database.
sf_connector_version_df.to_sql('driver_versions', engine, index=False, method=pd_writer)

# When the column names consist of only lower case letters, quote the column names
sf_connector_version_df = pd.DataFrame([('snowflake-connector-python', '1.0')], columns=['"name"', '"newest_version"'])
sf_connector_version_df.to_sql('driver_versions', engine, index=False, method=pd_writer)
Copy

La fonction pd_writer utilise la fonction write_pandas() pour écrire les données du DataFrame dans la base de données Snowflake.

ParamĂštres:

Les paramĂštres d’entrĂ©e valides sont :

ParamĂštre

Obligatoire

Description

table

Oui

objet pandas.io.sql.SQLTable pour la table.

conn

Oui

objet sqlalchemy.engine.Engine ou sqlalchemy.engine.Connection utilisé pour se connecter à la base de données Snowflake.

keys

Oui

Noms des colonnes de la table pour les données à insérer.

data_iter

Oui

Itérateur pour les lignes contenant les données à insérer.

Exemple:

L’exemple suivant transmet method=pd_writer Ă  la mĂ©thode pandas.DataFrame.to_sql qui Ă  son tour appelle la fonction pd_writer pour Ă©crire les donnĂ©es du DataFrame Pandas dans une base de donnĂ©es Snowflake.

import pandas
from snowflake.connector.pandas_tools import pd_writer

# Create a DataFrame containing data about customers
df = pandas.DataFrame([('Mark', 10), ('Luke', 20)], columns=['name', 'balance'])

# Specify that the to_sql method should use the pd_writer function
# to write the data from the DataFrame to the table named "customers"
# in the Snowflake database.
df.to_sql('customers', engine, index=False, method=pd_writer)
Copy

Prise en charge de l’horodatage et de la date¶

Snowflake prend en charge plusieurs types de données DATE et TIMESTAMP. Le connecteur Snowflake permet de lier des objets natifs datetime et date pour les opérations de mise à jour et de récupération.

Récupération de données¶

Lors de la rĂ©cupĂ©ration des donnĂ©es de date et d’heure, les types de donnĂ©es Snowflake sont convertis en types de donnĂ©es Python :

Types de données Snowflake

Type de données Python

Comportement

TIMESTAMP_TZ

datetime avec tzinfo

RĂ©cupĂšre les donnĂ©es, y compris le dĂ©calage de fuseau horaire, et les traduit en datetime avec l’objet tzinfo.

TIMESTAMP_LTZ, TIMESTAMP

datetime avec tzinfo

RécupÚre les données, les traduit en un objet datetime, et attache tzinfo en fonction du paramÚtre de session TIMESTAMP_TYPE_MAPPING.

TIMESTAMP_NTZ

datetime

RĂ©cupĂšre les donnĂ©es et les traduit en objet datetime. Aucune information de fuseau horaire n’est attachĂ©e Ă  l’objet.

DATE

date

RĂ©cupĂšre les donnĂ©es et les traduit en objet date. Aucune information de fuseau horaire n’est attachĂ©e Ă  l’objet.

Note

tzinfo est un objet de fuseau horaire UTC basé sur le décalage et non sur les noms de fuseau horaire IANA . Les noms de fuseau horaire peuvent ne pas correspondre, mais les objets de fuseau horaire équivalents basés sur le décalage sont considérés comme identiques.

Mise à jour des données¶

Lors de la mise Ă  jour des donnĂ©es de date et d’heure, les types de donnĂ©es Python sont convertis en types de donnĂ©es Snowflake :

Type de données Python

Types de données Snowflake

Comportement

datetime

TIMESTAMP_TZ, TIMESTAMP_LTZ, TIMESTAMP_NTZ, DATE

Convertit un objet « datetime Â» en une chaĂźne au format YYYY-MM-DD HH24:MI:SS.FF TZH:TZM et la met Ă  jour. Si aucun dĂ©calage de fuseau horaire n’est fourni, la chaĂźne sera au format YYYY-MM-DD HH24:MI:SS.FF. L’utilisateur est responsable du rĂ©glage de tzinfo pour l’objet datetime.

struct_time

TIMESTAMP_TZ, TIMESTAMP_LTZ, TIMESTAMP_NTZ, DATE

Convertit un objet « struct_time Â» en une chaĂźne au format YYYY-MM-DD HH24:MI:SS.FF TZH:TZM et la met Ă  jour. Les informations de fuseau horaire sont extraites de time.timezone qui inclut le dĂ©calage de fuseau horaire de UTC. L’utilisateur est responsable du paramĂ©trage de la variable d’environnement TZ pour time.timezone.

date

TIMESTAMP_TZ, TIMESTAMP_LTZ, TIMESTAMP_NTZ, DATE

Convertit un objet « date Â» en une chaĂźne au format YYYY-MM-DD. Aucun fuseau horaire n’est pris en compte.

time

TIMESTAMP_TZ, TIMESTAMP_LTZ, TIMESTAMP_NTZ, DATE

Convertit un objet « time Â» en une chaĂźne au format HH24:MI:SS.FF. Aucun fuseau horaire n’est pris en compte.

timedelta

TIMESTAMP_TZ, TIMESTAMP_LTZ, TIMESTAMP_NTZ, DATE

Convertit un objet « timedelta Â» en une chaĂźne au format HH24:MI:SS.FF. Aucun fuseau horaire n’est pris en compte.