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 remplacerparamstyle
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,))
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 siTrue
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 surTrue
ouFalse
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 deTrue
, assurez-vous dâappeler la mĂ©thodeclose
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 estNone
, le paramĂštre de session CLIENT_SESSION_KEEP_ALIVE est prioritaire. . . Pour remplacer le paramĂštre de session, passezTrue
ouFalse
pour cet argument.**Version 2.4.5 et antérieure : **
False
par défaut. . Lorsque la valeur estFalse
(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éthodeconnect
ne remplace pas la valeurTRUE
du paramĂštre de sessionCLIENT_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Ăštretoken
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. SiTrue
, 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écifiezqmark
ounumeric
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 surTrue
pour que les valeurs des colonnes DECIMAL soient retournées sous forme de nombres décimaux (decimal.Decimal
) lors de lâappel des mĂ©thodesfetch_pandas_all()
etfetch_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
estTrue
. 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()
ouSYSTEM$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 sur600
, ce qui signifie que seul le propriétaire peut accéder aux fichiers.True
définit les autorisations sur644
, 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
ouaccount
.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
ouaccount
.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 surTrue
.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
etraw_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',
... )
Lâexemple suivant utilise le localisateur de compte xy12345
comme identifiant de compte :
ctx = snowflake.connector.connect(
user='<user_name>',
password='<password>',
account='xy12345',
... )
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()
- 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 appelsfetch*()
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 appelsfetch*()
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 surTrue
, les commentaires sont supprimĂ©s de la requĂȘte. Sireturn_cursors
est défini surTrue
, cette mĂ©thode retourne une sĂ©quence dâobjetsCursor
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])
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 fonctionformat()
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)
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();
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, utilisezCursor.execute()
ouCursor.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 surTrue
, les commentaires sont supprimĂ©s de la requĂȘte. Ce gĂ©nĂ©rateur produit chaque objetCursor
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 valeurTrue
, 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}")
- get_query_status(query_id)¶
- But:
Renvoie le statut dâune requĂȘte.
- ParamĂštres:
query_id
ID de la requĂȘte. Voir RĂ©cupĂ©ration des ID de requĂȘte Snowflake.
- Renvoie:
Renvoie lâobjet
QueryStatus
qui reprĂ©sente le statut de la requĂȘte.- Exemple:
- 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éthodeexecute()
).- ParamĂštres:
query_id
ID de la requĂȘte. Voir RĂ©cupĂ©ration des ID de requĂȘte Snowflake.
- Renvoie:
Renvoie lâobjet
QueryStatus
qui reprĂ©sente le statut de la requĂȘte.- Exemple:
- 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:
- 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:
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:
- 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
utilisez lâappel suivant :
cursor.execute( "PUT file://this_directory_path/is_ignored/myfile.csv @mystage", file_stream=<io_object>)
- 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 (?, ?)"
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)
En interne, plusieurs méthodes
execute
sont appelées et le jeu de résultats du dernier appelexecute
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 appelexecute
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:
- 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:
- 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:
- 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:
- 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
ID de la requĂȘte. Voir RĂ©cupĂ©ration des ID de requĂȘte Snowflake.
- 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() # ...
- 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) # ...
- __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Ă©thodedescribe()
).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âobjetResultMetadata
:Indice de valeur
Attribut ResultMetadata
Description
0
name
Nom de colonne.
1
type_code
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 ouFalse
.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
ouNone
si aucunexecute
nâest exĂ©cutĂ©.
- sfqid¶
Attribut en lecture seule qui renvoie lâID de requĂȘte Snowflake dans le dernier
execute
ouexecute_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 |
---|---|
|
NUMBER(38, 0) |
|
NUMBER(38, 0) |
|
NUMBER(38, <échelle>) |
|
REAL |
|
TEXT |
|
TEXT |
|
BINARY |
|
BINARY |
|
BOOLEAN |
|
DATE |
|
TIME |
|
TIME |
|
TIMESTAMP_NTZ |
|
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¶
- 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 ouFalse
.
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
etCOPY 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
estTrue
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 commandeCOPY 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')
- 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érezmethod=pd_writer
pour indiquer que vous voulez utiliserpd_writer
comme mĂ©thode dâinsertion de donnĂ©es. (Vous nâavez pas besoin dâappelerpd_writer
à partir de votre propre code. La méthodeto_sql
appellepd_writer
et fournit les paramĂštres dâentrĂ©e nĂ©cessaires.)Pour plus dâinformations, voir :
Documentation sur la mĂ©thode dâinsertion.
Documentation sur pandas.
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 uneProgrammingError
.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 quepd_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)
La fonction
pd_writer
utilise la fonctionwrite_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
ousqlalchemy.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éthodepandas.DataFrame.to_sql
qui Ă son tour appelle la fonctionpd_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)
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 |
RécupÚre les données, y compris le décalage de fuseau horaire, et les traduit en |
|
TIMESTAMP_LTZ, TIMESTAMP |
RécupÚre les données, les traduit en un objet |
|
TIMESTAMP_NTZ |
RécupÚre les données et les traduit en objet |
|
DATE |
RécupÚre les données et les traduit en 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 |
struct_time |
TIMESTAMP_TZ, TIMESTAMP_LTZ, TIMESTAMP_NTZ, DATE |
Convertit un objet « struct_time » en une chaßne au format |
date |
TIMESTAMP_TZ, TIMESTAMP_LTZ, TIMESTAMP_NTZ, DATE |
Convertit un objet « date » en une chaßne au format |
time |
TIMESTAMP_TZ, TIMESTAMP_LTZ, TIMESTAMP_NTZ, DATE |
Convertit un objet « time » en une chaßne au format |
timedelta |
TIMESTAMP_TZ, TIMESTAMP_LTZ, TIMESTAMP_NTZ, DATE |
Convertit un objet « timedelta » en une chaßne au format |