Python-Konnektor-API¶
Der Snowflake Connector für Python implementiert die Spezifikation der Python Database API v2.0 (PEP-249). Unter diesem Thema werden die Standard-API und die Snowflake-spezifischen Erweiterungen behandelt.
Weitere Informationen dazu finden Sie in der Dokumentation zu PEP-249.
Unter diesem Thema:
Modul: snowflake.connector¶
Das Hauptmodul ist snowflake.connector, das ein Connection-Objekt erstellt und Error-Klassen bereitstellt.
Konstanten¶
- apilevel¶
Zeichenfolgenkonstante, die die unterstützte API-Ebene angibt. Der Konnektor unterstützt API
"2.0".
- threadsafety¶
Ganzzahlkonstante, die den von der Schnittstelle unterstützten Threadsicherheitslevel angibt. Der Snowflake-Konnektor für Python unterstützt Level
2, d. h. Threads können das Modul und die Verbindungen gemeinsam nutzen.
- paramstyle¶
Zeichenfolgenkonstante, die den Typ der von der Schnittstelle erwarteten Formatierung der Parametermarker angibt. Der Konnektor unterstützt standardmäßig den Typ
"pyformat", der für erweiterte Python-Formatcodes gilt (z. B....WHERE name=%soder...WHERE name=%(name)s).Connection.connectkannparamstyleüberschreiben, um die Bindungsvariablenformate in"qmark"oder"numeric"zu ändern, wobei die Variablen?bzw.:Nsind.Beispiel:
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,))
Bemerkung
Die Bindungsvariable tritt auf Clientseite auf, wenn
paramstyleden Wert"pyformat"oder"format"und auf Serverseite den Wert"qmark"oder"numeric"hat. Derzeit gibt es keinen signifikanten Unterschied zwischen diesen Optionen in Bezug auf Leistung oder Funktionsumfang, da der Konnektor das Kompilieren und anschließende mehrfache Ausführen von SQL-Text nicht unterstützt. Stattdessen richten sich die Optionen"qmark"und"numeric"nach der Abfragetextkompatibilität anderer Treiber (z. B. JDBC, ODBC, Go-Snowflake-Treiber), die serverseitige Bindungen mit dem variablen Format?oder:Nunterstützen.
Funktionen¶
- connect(parameters...)¶
- Zweck:
Konstruktor zum Erstellen einer Verbindung zur Datenbank. Gibt ein
Connection-Objekt zurück.Standardmäßig ist der Autocommit-Modus aktiviert (d. h. wenn die Verbindung geschlossen wird, werden alle Änderungen committet). Wenn Sie eine Transaktion benötigen, verwenden Sie den Befehl BEGIN, um die Transaktion zu starten, und COMMIT oder ROLLBACK, um Änderungen zu committen oder zurückzusetzen.
- Parameter:
Die gültigen Eingabeparameter sind:
Parameter
Erforderlich
Beschreibung
accountJa
Ihr Kontobezeichner. Der Kontobezeichner enthält nicht das Suffix
snowflakecomputing.com. . . Weitere Details und Beispiele dazu finden siehe unter Nutzungshinweise (unter diesem Thema).userJa
Anmeldename des Benutzers.
passwordJa
Kennwort für den Benutzer.
applicationName, der die Anwendung identifiziert, die die Verbindung herstellt.
regionVeraltet Diese Beschreibung des Parameters dient nur der Abwärtskompatibilität.
hostHostname.
portPort-Nummer (
443standardmäßig).databaseName der zu verwendenden Standarddatenbank. Nach der Anmeldung können Sie mit USE DATABASE die Datenbank ändern.
schemaName des Standardschemas, das für die Datenbank verwendet werden soll. Nach der Anmeldung können Sie mit USE SCHEMA das Schema ändern.
roleName der Standardrolle, die verwendet werden soll. Nach der Anmeldung können Sie mit USE ROLE die Rolle ändern.
warehouseName des zu verwendenden Standard-Warehouse. Nach der Anmeldung können Sie mit USE WAREHOUSE das Warehouse ändern.
passcode_in_passwordStandardmäßig
False. Stellen Sie dies aufTrueein, wenn die MFA-Kennung (mehrstufige Authentifizierung) in das Anmeldekennwort eingebettet ist.passcodeKennung, die von Duo bei der Verwendung von MFA (mehrstufige Authentifizierung) für die Anmeldung bereitgestellt wird.
private_keyDer private Schlüssel, der für die Authentifizierung verwendet wird. Weitere Informationen dazu finden Sie unter Verwenden von Schlüsselpaar-Authentifizierung und Schlüsselpaar-Rotation.
private_key_fileGibt den Pfad zur Datei des privaten Schlüssels für den angegebenen Benutzer an. Siehe Verwenden von Schlüsselpaar-Authentifizierung und Schlüsselpaar-Rotation.
private_key_file_pwdGibt die Passphrase zum Entschlüsseln der Datei des privaten Schlüssels für den angegebenen Benutzer an. Siehe Verwenden von Schlüsselpaar-Authentifizierung und Schlüsselpaar-Rotation.
autocommitStandardmäßig
None, wodurch der Snowflake-Parameter AUTOCOMMIT berücksichtigt wird. Stellen Sie dies aufTrueoderFalseein, um den Autocommit-Modus in der Sitzung zu aktivieren bzw. zu deaktivieren.client_fetch_use_mpBei der Einstellung
Truewird der mehrfach verarbeitete Abruf aktiviert, was in vielen Fällen die Abrufzeit verkürzen sollte. Standard:False.client_prefetch_threadsAnzahl der Threads, die zum Herunterladen der Resultset verwendet werden (standardmäßig
4). Das Erhöhen des Werts verbessert die Abrufleistung, erfordert jedoch mehr Speicher.client_session_keep_aliveUm die Sitzung auf unbestimmte Zeit aktiv zu halten (auch wenn es keine Aktivitäten des Benutzers gibt), legen Sie den Wert auf
Trueein. Wenn dieser Wert aufTrueeingestellt ist, rufen Sie dieclose-Methode auf, um den Thread ordnungsgemäß zu beenden, da sonst der Prozess hängen bleiben kann. Der Standardwert hängt von der Version des Konnektors ab, den Sie verwenden:Version 2.4.6 und später: Standardmäßig
None. . Wenn der WertNoneist, hat der Sitzungsparameter CLIENT_SESSION_KEEP_ALIVE Vorrang. . . Um den Sitzungsparameter außer Kraft zu setzen, geben SieTrueoderFalsefür dieses Argument ein.Version 2.4.5 und früher:
Falsestandardmäßig. . Wenn der WertFalselautet (entweder durch explizite Angabe des Wertes oder durch Weglassen des Arguments), hat der Sitzungsparameter CLIENT_SESSION_KEEP_ALIVE Vorrang. . .
Die Übergabe von
client_session_keep_alive=Falsean die Methodeconnectüberschreibt nicht den WertTRUEim SitzungsparameterCLIENT_SESSION_KEEP_ALIVE.login_timeoutTimeout für Anmeldung in Sekunden. Standardmäßig 60 Sekunden. Die Anmeldeanforderung gibt nach Ablauf des Timeouts auf, wenn die HTTP-Antwort „success“ ist.
network_timeoutTimeout für alle anderen Operationen in Sekunden. Standardmäßig „none“ oder „infinite“. Eine allgemeine Anforderung gibt nach Ablauf des Timeout auf, wenn die HTTP-Antwort nicht „success“ ist.
ocsp_response_cache_filenameURI für die OCSP-Antwort-Cachedatei. Standardmäßig wird die OCSP-Antwort-Cachedatei im Cacheverzeichnis erstellt:
Linux:
~/.cache/snowflake/ocsp_response_cachemacOS:
~/Library/Caches/Snowflake/ocsp_response_cacheWindows:
%USERPROFILE%AppDataLocalSnowflakeCachesocsp_response_cache
Um die Datei in einem anderen Verzeichnis zu lokalisieren, geben Sie den Pfad und Dateinamen in der URI an (z. B.
file:///tmp/my_ocsp_response_cache.txt).authenticatorAuthentifikator für Snowflake:
snowflake(Standard), um den internen Snowflake-Authentifikator zu verwenden.externalbrowser, um sich mit Ihrem Webbrowser und Okta, AD FS oder einem anderen SAML 2.0-kompatiblen Identitätsanbieter (IdP) zu authentifizieren, der für Ihr Konto definiert wurde.https://<Okta-Kontoname>.okta.com(d. h. der URL-Endpunkt für Okta) zur Authentifizierung durch natives Okta.oauthzum Authentifizieren mit OAuth. Sie müssen auch den Parametertokenangeben und seinen Wert auf das OAuth-Zugriffstoken setzen.username_password_mfazum Authentifizieren mit MFA-Tokencaching. Weitere Details dazu finden Sie unter Verwenden von MFA-Tokencaching zur Minimierung der Anzahl von Eingabeaufforderungen bei der Authentifizierung – Optional.OAUTH_AUTHORIZATION_CODEzur Verwendung des OAuth 2.0-Autorisierungscodeablaufs.OAUTH_CLIENT_CREDENTIALSzur Verwendung des OAuth 2.0-Client-Anmeldeinformationsablaufs.WORKLOAD_IDENTITYzum Authentifizieren mit dem Workload Identity Federation (WIF)-Authentifikator
Wenn der Wert nicht
snowflakeist, müssen für die Benutzer- und Kennwortparameter Ihre IdP-Anmeldeinformationen verwendet werden.validate_default_parametersStandardmäßig
False. WennTrue, dann:Wenn Datenbank, Schema oder Warehouse nicht vorhanden ist, wird eine Ausnahme ausgelöst.
Wenn ein ungültiger Argumentname oder ein Argumentwert des falschen Datentyps übergeben wird, dann wird eine Warnung an stderr gedruckt.
paramstyleStandardmäßig
pyformatfür die clientseitige Bindung. Geben Sieqmarkodernumerican, um die Formate der Bindungsvariablen für die serverseitige Bindung zu ändern.timezoneStandardmäßig
None, wodurch der Snowflake-Parameter TIMEZONE berücksichtigt wird. Wird auf eine gültige Zeitzone (z. B.America/Los_Angeles) eingestellt, um die Sitzungszeitzone anzugeben.arrow_number_to_decimalStandardmäßig
False, was bedeutet, dass NUMBER-Spaltenwerte als Gleitkommazahlen mit doppelter Genauigkeit (float64) zurückgegeben werden. . . Setzen Sie dies aufTrue, um DECIMAL-Spaltenwerte als Dezimalzahlen (decimal.Decimal) zurückzugeben, wenn Sie die Methodenfetch_pandas_all()undfetch_pandas_batches()aufrufen. . . Dieser Parameter wurde in Version 2.4.3 des Snowflake-Konnektors für Python eingeführt.socket_timeoutTimeout in Sekunden für Lese- und Verbindungsanforderungen auf Socket-Ebene. Weitere Informationen dazu finden Sie unter Verwalten von Verbindungstimeouts.
backoff_policyName der Generatorfunktion, die festlegt, wie lange zwischen den Wiederholungsversuchen gewartet werden soll. Weitere Informationen dazu finden Sie unter Verwalten von Verbindungs-Backoff-Richtlinien für Wiederholungsversuche.
enable_connection_diagOb ein Bericht zur Konnektivitätdiagnose erstellt werden soll. Standardwert ist
False.connection_diag_log_pathAbsoluter Pfad für den Speicherort des Diagnoseberichts. Wird nur verwendet, wenn
enable_connection_diagTrueist. Standard ist das standardmäßige temporäre Verzeichnis für Ihr System, z. B./tmpfür Linux oder Mac.connection_diag_allowlist_pathAbsoluter Pfad zu einer JSON-Datei, die die Ausgabe von
SYSTEM$ALLOWLIST()oderSYSTEM$ALLOWLIST_PRIVATELINK()enthält. Nur erforderlich, wenn der in der Verbindung definierte Benutzer nicht die Berechtigung hat, die Funktionen der Systemzulassungsliste auszuführen, oder wenn die Verbindung mit dem Konto URL fehlschlägt.iobound_tpe_limitGröße der preprocess_tpe und postprocess threadpool executors (TPEs). Standardmäßig ist der Wert der kleiner der beiden Werte für die Anzahl der Dateien und der Anzahl der CPU-Kerne.
unsafe_file_writeLegt fest, welche Dateiberechtigungen für Dateien gelten sollen, die mit dem Befehl GET aus einem Stagingbereich heruntergeladen wurden.
False(Standard) setzt die Dateiberechtigungen auf600, was bedeutet, dass nur der Eigentümer auf die Dateien zugreifen kann.Truesetzt die Berechtigungen auf644, was dem Eigentümer Lese- und Schreibrechte und allen anderen nur Leserechte gibt. Weitere Informationen dazu finden Sie unter Herunterladen von Daten.oauth_client_idWert der
client id, die vom Identitätsanbieter für die Snowflake-Integration bereitgestellt wird (Snowflake-Metadaten für die Sicherheitsintegration).oauth_client_secretWert des
client secret, das vom Identitätsanbieter für die Snowflake-Integration bereitgestellt wird (Snowflake-Metadaten für die Sicherheitsintegration).oauth_authorization_urlEndpunkt des Identitätsanbieters, der den Autorisierungscode an den Treiber liefert. Wenn Snowflake als Identitätsanbieter verwendet wird, wird dieser Wert von den Parametern
serveroderaccountabgeleitet.oauth_token_request_urlEndpunkt des Identitätsanbieters, der die Zugriffstoken für den Treiber bereitstellt. Wenn Snowflake als Identitätsanbieter verwendet wird, wird dieser Wert von den Parametern
serveroderaccountabgeleitet.oauth_scopeBereich, der in der Autorisierungsanfrage des Identitätsanbieters angefordert wird. Standardmäßig wird dies von der Rolle abgeleitet. Wenn mehrere Bereiche erforderlich sind, sollte der Wert eine durch Leerzeichen getrennte Liste mit mehreren Bereichen sein.
oauth_redirect_uriURI zur Verwendung für die Umleitung des Autorisierungscodes (Metadaten zur Snowflake-Sicherheitsintegration). Standard:
http://127.0.0.1:{randomAvailablePort}.oauth_disable_pkceDeaktiviert Proof Key for Code Exchange (PKCE), eine Sicherheitsverbesserung, die sicherstellt, dass selbst wenn böswillige Angreifer einen Autorisierungscode abfangen, sie nicht in der Lage sind, ihn in ein gültiges Zugriffstoken zu ändern.
oauth_enable_refresh_tokenErmöglicht eine stille Neuauthentifizierung, wenn das aktuelle Zugriffstoken veraltet ist, vorausgesetzt, es wird vom Autorisierungsserver unterstützt und
client_store_temporary_credentialist aufTruegesetzt.oauth_enable_single_use_refresh_tokensOb Sie sich für die Semantik des einmaligen Aktualisierungs-Tokens entscheiden.
workload_identity_providerPlattform des Workload-Identitätsanbieters. Mögliche Werte sind:
AWS,AZURE,GCPundOIDC.
Attribute¶
- Error, Warning, ...
Alle Ausnahmeklassen, die durch den Python-Datenbank-API-Standard definiert sind. Der Snowflake-Konnektor für Python stellt die Attribute
msg,errno,sqlstate,sfqidundraw_msgbereit.
Nutzungshinweise für die Verwendung des account-Parameters (für die connect-Methode)¶
Geben Sie für den erforderlichen Parameter account Ihren Kontobezeichner an.
Beachten Sie, dass der Kontobezeichner nicht den snowflakecomputing.com-Domänennamen enthält. Snowflake hängt diesen automatisch beim Erstellen der Verbindung an.
Das folgende Beispiel verwendet den Kontonamen als Bezeichner für das Konto myaccount in der Organisation myorganization.
ctx = snowflake.connector.connect(
user='<user_name>',
password='<password>',
account='myorganization-myaccount',
... )
Im folgenden Beispiel wird der Konto-Locator xy12345 als Kontobezeichner verwendet:
ctx = snowflake.connector.connect(
user='<user_name>',
password='<password>',
account='xy12345',
... )
Beachten Sie, dass in diesem Beispiel ein Konto in der Region AWS US West (Oregon) verwendet wird. Wenn sich das Konto in einer anderen Region befindet oder wenn das Konto einen anderen Cloudanbieter verwendet, müssen Sie nach dem Konto-Locator zusätzliche Segmente angeben.
Objekt: Connection¶
Ein Connection-Objekt enthält die Verbindungs- und Sitzungsinformationen, um die Datenbankverbindung aktiv zu halten. Wenn die Verbindung getrennt wird oder die Sitzung abläuft, schlagen alle nachfolgenden Operationen fehl.
Methoden¶
- autocommit(True|False)¶
- Zweck:
Aktiviert oder deaktiviert den Autocommit-Modus. Standardmäßig ist Autocommit aktiviert (
True).
- close()¶
- Zweck:
Schließt die Verbindung. Wenn eine Transaktion beim Schließen der Verbindung noch geöffnet ist, werden die Änderungen rückgängig gemacht.
Wenn die Verbindung explizit geschlossen wird, wird die aktive Sitzung vom Server entfernt. Andernfalls wird die aktive Sitzung fortgesetzt, bis sie schließlich endgültig vom Server entfernt wird, wodurch die Anzahl der gleichzeitigen Abfragen begrenzt wird.
Beispiel:
# 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()¶
- Zweck:
Wenn Autocommit deaktiviert ist, wird die aktuelle Transaktion committet. Wenn Autocommit aktiviert ist, wird diese Methode ignoriert.
- rollback()¶
- Zweck:
Wenn Autocommit deaktiviert ist, erfolgt ein Rollback der aktuellen Transaktion. Wenn Autocommit aktiviert ist, wird diese Methode ignoriert.
- cursor()¶
- Zweck:
Konstruktor zum Erstellen eines
Cursor-Objekts. Die Rückgabewerte vonfetch*()-Aufrufen sind eine einzelne Sequenz oder eine Liste von Sequenzen.
- cursor(snowflake.connector.DictCursor)
- Zweck:
Konstruktor zum Erstellen eines
DictCursor-Objekts. Die Rückgabewerte vonfetch*()-Aufrufen sind ein einzelnes dict-Objekt oder eine Liste von dict-Objekten. Dies ist nützlich, um Werte nach Spaltennamen aus den Ergebnissen abzurufen.
- execute_string(sql_text, remove_comments=False, return_cursors=True)¶
- Zweck:
Führt eine oder mehrere SQL-Anweisungen aus, die als Zeichenfolgen übergeben werden. Wenn
remove_commentsaufTruegesetzt ist, werden Kommentare aus der Abfrage entfernt. Wennreturn_cursorsaufTruegesetzt ist, gibt diese Methode eine Sequenz vonCursor-Objekten in der Reihenfolge der Ausführung zurück.- Beispiel:
Im folgenden Beispiel wird die Ausführung mehrerer Befehle in einer einzigen Zeichenfolge und die Verwendung der zurückgegebenen Sequenz von Cursors gezeigt:
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])
Bemerkung
Methoden wie
execute_string(), die mehrere SQL-Anweisungen in einer einzigen Zeichenfolge zulassen, sind anfällig für Angriffe durch Einschleusung von SQL-Befehlen. Vermeiden Sie bei der dynamischen Erstellung von SQL-Anweisungen für die Kombination von SQL mit Benutzerdaten die Verwendung der Zeichenfolgenverkettungen oder von Funktionen wie die Python-Funktionformat(), es sei denn, Sie haben die Benutzerdaten validiert. Im Beispiel unten wird das Problem veranschaulicht:# "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)
Die dynamisch zusammengesetzte Anweisung sieht wie folgt aus (zur besseren Lesbarkeit wurden neue Zeilen hinzugefügt):
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();
Wenn Sie SQL-Anweisungen mit Zeichenfolgen kombinieren, die von nicht vertrauenswürdigen Benutzern eingegeben wurden, ist es sicherer, Daten an eine Anweisung zu binden statt eine Zeichenfolge zu erstellen. Die Methode
execute_string()übernimmt keine Bindungsparameter, verwenden Sie daher zum Binden von ParameternCursor.execute()oderCursor.executemany().
- execute_stream(sql_stream, remove_comments=False)¶
- Zweck:
Führt eine oder mehrere SQL-Anweisungen aus, die als Streamobjekt übergeben werden. Wenn
remove_commentsaufTruegesetzt ist, werden Kommentare aus der Abfrage entfernt. Dieser Generator liefert jedesCursor-Objekt als Ausführung von SQL-Anweisungen.Wenn
sql_streammit Kommentarzeilen endet, müssen Sieremove_commentsaufTruesetzen, ähnlich wie :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)¶
- Zweck:
Gibt den Status einer Abfrage zurück.
- Parameter:
query_idDie ID der Abfrage. Siehe Abrufen der Snowflake-Abfrage-ID.
- Rückgabewerte:
Gibt das Objekt
QueryStatuszurück, das den Status der Abfrage repräsentiert.- Beispiel:
- get_query_status_throw_if_error(query_id)¶
- Zweck:
Gibt den Status einer Abfrage zurück. Wenn die Abfrage zu einem Fehler führt, löst diese Methode einen
ProgrammingErroraus (wie die Methodeexecute()).- Parameter:
query_idDie ID der Abfrage. Siehe Abrufen der Snowflake-Abfrage-ID.
- Rückgabewerte:
Gibt das Objekt
QueryStatuszurück, das den Status der Abfrage repräsentiert.- Beispiel:
- is_valid()¶
- Zweck:
Gibt
Truezurück, wenn die Verbindung stabil genug ist, um Abfragen zu empfangen.
- is_still_running(query_status)¶
- Zweck:
Gibt
Truezurück, wenn der Abfragestatus anzeigt, dass die Abfrage noch nicht abgeschlossen oder noch in Bearbeitung ist.- Parameter:
query_statusDas Objekt
QueryStatus, das den Status der Abfrage repräsentiert. Um dieses Objekt für eine Abfrage zu erhalten, siehe Überprüfen des Status einer Abfrage.- Beispiel:
- is_an_error(query_status)¶
- Zweck:
Gibt
Truezurück, wenn der Abfragestatus anzeigt, dass die Abfrage zu einem Fehler geführt hat.- Parameter:
query_statusDas Objekt
QueryStatus, das den Status der Abfrage repräsentiert. Um dieses Objekt für eine Abfrage zu erhalten, siehe Überprüfen des Status einer Abfrage.- Beispiel:
Attribute¶
- expired¶
Verfolgt, ob das Master-Token der Verbindung abgelaufen ist.
- messages¶
Das Listenobjekt einschließlich der Sequenzen (Ausnahmeklasse, Ausnahmewert) für alle Meldungen, die von der zugrunde liegenden Datenbank für diese Verbindung empfangen werden.
Die Liste wird bei jedem Methodenaufruf automatisch gelöscht.
- errorhandler¶
Lese-/Schreibattribut, das einen Fehlerhandler referenziert, der aufgerufen wird, wenn eine Fehlerbedingung erfüllt ist.
Der Handler muss eine aufrufbare Python-Methode sein, die die folgenden Argumente akzeptiert:
errorhandler(connection, cursor, errorclass, errorvalue)
- Error, Warning, ...
Alle Ausnahmeklassen, die durch den Python-Datenbank-API-Standard definiert sind.
Objekt: Cursor¶
Ein Cursor-Objekt stellt einen Datenbankcursor für Ausführungs- und Abrufoperationen dar. Jeder Cursor hat seine eigenen Attribute, description und rowcount, sodass die Cursors isoliert sind.
Methoden¶
- close()
- Zweck:
Schließt das Cursorobjekt.
- describe(command [, parameters][, timeout][, file_stream])¶
- Zweck:
Gibt Metadaten über das Resultset zurück, ohne dass ein Datenbankbefehl ausgeführt wird. Dies gibt die gleichen Metadaten zurück, die nach der Ausführung einer Abfrage im Attribut
descriptionverfügbar sind.Diese Methode wurde in Version 2.4.6 des Snowflake-Konnektors für Python eingeführt.
- Parameter:
Siehe Parameter für die Methode
execute().- Rückgabewerte:
Gibt eine Liste von ResultMetadata-Objekten zurück, die die Spalten im Resultset beschreiben.
- Beispiel:
Siehe Abrufen von Spaltenmetadaten.
- execute(command [, parameters][, timeout][, file_stream])¶
- Zweck:
Bereitet einen Datenbankbefehl vor und führt diesen aus.
- Parameter:
commandEine Zeichenfolge, die die auszuführende SQL-Anweisung enthält.
parameters(Optional) Wenn Sie in der SQL-Anweisung Parameter für das Binden von Daten verwendet haben, setzen Sie dies auf die Liste oder das Wörterbuch der Variablen, die an diese Parameter gebunden werden sollen.
Weitere Informationen zum Zuordnen der Python-Datentypen der Variablen zu SQL-Datentypen der zugehörigen Spalten finden Sie unter Datentyp-Zuordnungen für qmark- und numeric-Bindungen.
timeout(Optional) Anzahl der Sekunden, die auf den Abschluss der Abfrage gewartet werden soll. Wenn die Abfrage nach Ablauf dieser Zeit nicht abgeschlossen ist, sollte die Abfrage abgebrochen werden.
file_stream(Optional) Bei der Ausführung eines PUT-Befehls können Sie diesen Parameter verwenden, um statt einer Datei im Dateisystem ein dateiähnliches Objekt im Arbeitsspeicher (z. B. das von der Python-Funktion
open()zurückgegebene E/A-Objekt) hochzuladen. Setzen Sie diesen Parameter auf dieses E/A-Objekt.Bei Angabe der URI für die Datendatei im PUT-Befehl:
Sie können einen beliebigen Verzeichnispfad verwenden. Der Verzeichnispfad, den Sie in der URI angeben, wird ignoriert.
Geben Sie für den Dateinamen den Namen der Datei an, die im Stagingbereich erstellt werden soll.
Laden Sie zum Beispiel eine Datei aus einem Dateistream in eine Datei mit folgendem Namen hoch:
@mystage/myfile.csv
verwenden Sie den folgenden Aufruf:
cursor.execute( "PUT file://this_directory_path/is_ignored/myfile.csv @mystage", file_stream=<io_object>)
- Rückgabewerte:
Gibt die Referenz eines
Cursor-Objekts zurück.
- executemany(command, seq_of_parameters)¶
- Zweck:
Bereitet einen Datenbankbefehl vor und führt diesen für alle in
seq_of_parametersgefundenen Parametersequenzen aus. Sie können diese Methode verwenden, um eine Batch-Einfügeoperation auszuführen.- Parameter:
commandDer Befehl ist eine Zeichenfolge, die den auszuführenden Code enthält. Die Zeichenfolge sollte einen oder mehrere Platzhalter (z. B. Fragezeichen) für Binden von Daten enthalten.
Beispiel:
"insert into testy (v1, v2) values (?, ?)"seq_of_parametersDies sollte eine Sequenz (Liste oder Tupel) von Listen oder Tupeln sein. Der unten stehende Beispielcode zeigt mögliche Sequenzen.
- Rückgabewerte:
Gibt die Referenz eines
Cursor-Objekts zurück.- Beispiel:
# 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)
Intern werden mehrere
execute-Methoden aufgerufen, und das Resultset des letztenexecute-Anrufs bleibt erhalten.Bemerkung
Die
executemany-Methode kann nur zur Ausführung einzelner parametrisierter SQL-Anweisung und zur Übergabe mehrerer Bindungswerte verwendet werden.Das Ausführen mehrerer, durch Semikolon getrennter SQL-Anweisungen innerhalb eines
execute-Aufrufs wird nicht unterstützt. Geben Sie stattdessen für jede Anweisung einen separatenexecute-Aufruf aus.
- execute_async(...)¶
- Zweck:
Bereitet einen Datenbankbefehl für die asynchrone Ausführung vor und übermittelt den Befehl. Siehe Ausführen einer asynchronen Abfrage.
- Parameter:
Diese Methode verwendet die gleichen Parameter wie die Methode
execute().- Rückgabewerte:
Gibt die Referenz eines
Cursor-Objekts zurück.- Beispiel:
- fetch_arrow_all()¶
- Zweck:
Diese Methode ruft alle Zeilen in einem Cursor ab und lädt sie in eine PyArrow-Tabelle.
- Parameter:
Keine.
- Rückgabewerte:
Gibt eine PyArrow-Tabelle zurück, die alle Zeilen aus dem Resultset enthält.
Wenn keine Zeilen vorhanden sind, wird „None“ zurückgegeben.
- Beispiel:
Siehe Verteilen von Workloads, die Ergebnisse mit dem Snowflake-Konnektor für Python abrufen.
- fetch_arrow_batches()¶
- Zweck:
Diese Methode ruft eine Teilmenge der Zeilen in einem Cursor ab und liefert sie an eine PyArrow-Tabelle.
- Parameter:
Keine.
- Rückgabewerte:
Gibt eine PyArrow-Tabelle zurück, die eine Teilmenge der Zeilen aus dem Resultset enthält.
Gibt „None“ zurück, wenn keine Zeilen mehr zum Abrufen vorhanden sind.
- Beispiel:
Siehe Verteilen von Workloads, die Ergebnisse mit dem Snowflake-Konnektor für Python abrufen.
- get_result_batches()¶
- Zweck:
Gibt eine Liste von ResultBatch-Objekten zurück, die Sie verwenden können, um eine Teilmenge von Zeilen aus dem Resultset abzurufen.
- Parameter:
Keine.
- Rückgabewerte:
Gibt eine Liste von ResultBatch-Objekten zurück oder
None, wenn die Ausführung der Abfrage nicht abgeschlossen wurde.- Beispiel:
Siehe Verteilen von Workloads, die Ergebnisse mit dem Snowflake-Konnektor für Python abrufen.
- get_results_from_sfqid(query_id)¶
- Zweck:
Ruft die Ergebnisse einer asynchronen Abfrage oder einer zuvor übermittelten synchronen Abfrage ab.
- Parameter:
query_idDie ID der Abfrage. Siehe Abrufen der Snowflake-Abfrage-ID.
- Beispiel:
Siehe Verwenden der Abfrage-ID zum Abrufen von Abfrageergebnissen.
- fetchone()¶
- Zweck:
Ruft die nächste Zeile aus dem Resultset einer Abfrage ab und gibt eine einzelne Sequenz/dict zurück oder
None, wenn keine weiteren Daten verfügbar sind.
- fetchmany([size=cursor.arraysize])¶
- Zweck:
Ruft die nächsten Zeilen aus dem Resultset einer Abfrage ab und gibt eine Liste von Sequenzen/dict zurück. Eine leere Sequenz wird zurückgegeben, wenn keine Zeilen mehr verfügbar sind.
- fetchall()¶
- Zweck:
Ruft alle oder die restlichen Zeilen aus dem Resultset einer Abfrage ab und gibt eine Liste von Sequenzen/dict zurück.
- fetch_pandas_all()¶
- Zweck:
Diese Methode ruft alle Zeilen in einem Cursor ab und lädt sie in einen pandas-DataFrame.
- Parameter:
Keine.
- Rückgabewerte:
Gibt einen DataFrame zurück, der alle Zeilen aus dem Resultset enthält.
Weitere Informationen zu pandas-DataFrames finden Sie in der Dokumentation zu pandas-DataFrame.
Wenn keine Zeilen vorhanden sind, wird
Nonezurückgegeben.
- Nutzungshinweise:
Diese Methode ist kein vollständiger Ersatz für die pandas-Methode
read_sql(). Diese Methode bietet eine schnelle Möglichkeit, Daten aus einer SELECT-Abfrage abzurufen und die Daten in einem pandas-DataFrame zu speichern.Derzeit funktioniert diese Methode nur für SELECT-Anweisungen.
- Beispiele:
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()¶
- Zweck:
Diese Methode ruft eine Teilmenge der Zeilen in einem Cursor ab und liefert sie an einen pandas-DataFrame.
- Parameter:
Keine.
- Rückgabewerte:
Gibt einen DataFrame zurück, der eine Teilmenge der Zeilen aus dem Resultset enthält.
Weitere Informationen zu pandas-DataFrames finden Sie in der Dokumentation zu pandas-DataFrame.
Gibt
Nonezurück, wenn keine Zeilen mehr zum Abrufen vorhanden sind.
- Nutzungshinweise:
Abhängig von der Anzahl der Zeilen im Resultset sowie der Anzahl der im Methodenaufruf angegebenen Zeilen muss die Methode möglicherweise mehrmals aufgerufen werden, oder es werden möglicherweise alle Zeilen in einem einzigen Batch zurückgegeben, wenn sie alle passen.
Diese Methode ist kein vollständiger Ersatz für die pandas-Methode
read_sql(). Diese Methode bietet eine schnelle Möglichkeit, Daten aus einer SELECT-Abfrage abzurufen und die Daten in einem pandas-DataFrame zu speichern.Derzeit funktioniert diese Methode nur für SELECT-Anweisungen.
- Beispiele:
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__()¶
Gibt sich selbst zurück, um für Kompatibilität der Cursors mit dem Iterationsprotokoll zu sorgen.
Attribute¶
- description¶
Schreibgeschütztes Attribut, das Metadaten über die Spalten im Resultset zurückgibt.
Dieses Attribut wird festgelegt, nachdem Sie die Methode
execute()zur Ausführung der Abfrage aufgerufen haben. (Ab Version 2.4.6 können Sie diese Metadaten abrufen, ohne die Abfrage auszuführen, indem Sie die Methodedescribe()aufrufen.)Dieses Attribut wird auf einen der folgenden Werte gesetzt:
Versionen 2.4.5 und früher: Dieses Attribut wird auf eine Liste von Tupeln gesetzt.
Versionen 2.4.6 und später: Dieses Attribut wird auf eine Liste von ResultMetadata-Objekten gesetzt.
Jedes Tupel- oder
ResultMetadata-Objekt enthält die Metadaten, die eine Spalte im Resultset beschreiben. Sie können auf die Metadaten über den Index oder ab Version 2.4.6 auch über das ObjektattributResultMetadatazugreifen:Index des Wertes
ResultMetadata-Attribut
Beschreibung
0nameSpaltenname.
1type_codeInterner Typcode.
2display_size(Nicht verwendet. Wie „internal_size“.)
3internal_sizeInterne Datengröße.
4precisionGenauigkeit der numerischen Daten.
5scaleDezimalstellenzahl der numerischen Daten.
6is_nullableTrue, wenn NULL-Werte für die Spalte erlaubt sind, ansonstenFalse.Beispiele für das Abrufen dieses Attributs finden Sie unter Abrufen von Spaltenmetadaten.
- rowcount¶
Nur-Lese-Attribut, das die Anzahl der Zeilen des zuletzt erstellten
executezurückgibt. Der Wert ist-1oderNone, wenn keinexecuteausgeführt wird.
- sfqid¶
Nur-Lese-Attribut, das die Snowflake-Abfrage-ID im zuletzt ausgeführten
execute- oderexecute_async-Befehl zurückgibt.
- arraysize¶
Lese-/Schreibattribut, das die Anzahl der auf einmal mit
fetchmany()abzurufenden Zeilen angibt. Es hat standardmäßig den Wert1, was bedeutet, dass jeweils eine einzelne Zeile abgerufen wird.
- connection¶
Nur-Lese-Attribut, das eine Referenz auf das Objekt
Connectionzurückgibt, auf dem der Cursor erstellt wurde.
- messages
Listenobjekt, das die Sequenzen (Ausnahmeklasse, Ausnahmewert) für alle Meldungen enthält, die es von der zugrunde liegenden Datenbank für den Cursor erhalten hat.
Die Liste wird automatisch bei jedem Methodenaufruf mit Ausnahme von
fetch*()-Aufrufen gelöscht.
- errorhandler
Lese-/Schreibattribut, das einen Fehlerhandler referenziert, der aufgerufen wird, wenn eine Fehlerbedingung erfüllt ist.
Der Handler muss eine aufrufbare Python-Methode sein, die die folgenden Argumente akzeptiert:
errorhandler(connection, cursor, errorclass, errorvalue)
Typcodes¶
Im Cursor-Objekt liefern das Attribut description und die Methode describe() eine Liste von Tupeln (oder ab Version 2.4.6 auch ResultMetadata-Objekten), die die Spalten im Resultset beschreiben.
In einem Tupel repräsentiert der Wert bei Index 1 (das Attribut Typcode im Objekt ResultMetadata) den Datentyp der Spalte. Der Snowflake-Konnektor für Python verwendet die folgende Zuordnung, um die Zeichenfolgenrepräsentation basierend auf dem Typcode zu erhalten:
Typcode |
Zeichenfolgendarstellung |
Datentyp |
|---|---|---|
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 |
Datentyp-Zuordnungen für qmark- und numeric-Bindungen¶
Wenn paramstyle entweder "qmark" oder "numeric" ist, werden die folgenden Standardzuordnungen von Python- zu Snowflake-Datentypen verwendet:
Python-Datentyp |
Datentyp in Snowflake |
|---|---|
|
NUMBER(38, 0) |
|
NUMBER(38, 0) |
|
NUMBER(38, <Dezimalstellenzahl>) |
|
REAL |
|
TEXT |
|
TEXT |
|
BINARY |
|
BINARY |
|
BOOLEAN |
|
DATE |
|
TIME |
|
TIME |
|
TIMESTAMP_NTZ |
|
TIMESTAMP_NTZ |
Wenn die Zuordnung zu einem anderen Snowflake-Typ (z. B. datetime zu TIMESTAMP_LTZ) erfolgen soll, geben Sie den Snowflake-Datentyp in einem Tupel an, das aus dem Snowflake-Datentyp und dem Wert besteht. Entsprechende Beispiele finden Sie unter Binden von datetime an TIMESTAMP.
Objekt: Exception¶
In PEP-249 sind die Ausnahmen definiert, die der Snowflake Connector für Python im Falle von Fehlern oder Warnungen auslösen kann. Die Anwendung muss korrekt reagieren und entscheiden, ob die Codeausführung fortgesetzt oder abgebrochen wird.
Weitere Informationen dazu finden Sie in der Dokumentation zu PEP-249.
Methoden¶
Für Exception-Objekte sind keine Methoden verfügbar.
Attribute¶
- errno¶
Snowflake-DB-Fehlercode.
- msg¶
Fehlermeldung mit Fehlercode, SQL-Zustandscode und Abfrage-ID.
- raw_msg¶
Fehlermeldung. Enthält weder Fehlercode, noch SQL-Zustandscode oder Abfrage-ID.
- sqlstate¶
ANSI-kompatibler SQL-Zustandscode
- sfqid
Snowflake-Abfrage-ID.
Objekt ResultBatch¶
Ein ResultBatch-Objekt kapselt eine Funktion, die eine Teilmenge von Zeilen in einem Resultset abruft. Damit Sie das Abrufen von Ergebnissen auf mehrere Mitarbeiter oder Knoten verteilen können, rufen Sie die Methode get_result_batches() im Cursor-Objekt auf. Mit dieser Methode wird eine Liste von ResultBatch-Objekten abgerufen, die dann zur Verarbeitung an verschiedene Mitarbeiter oder Knoten verteilt werden.
Attribute¶
rowcount¶
Nur-Lese-Attribut, das die Anzahl der Zeilen des zuletzt erstellten Resultbatches zurückgibt.
compressed_size¶
Nur-Lese-Attribut, das die Größe der Daten (im komprimierten Zustand) im Resultbatch zurückgibt.
uncompressed_size¶
Nur-Lese-Attribut, das die Größe der Daten (im nicht komprimierten Zustand) im Resultbatch zurückgibt.
Methoden¶
- to_arrow()¶
- Zweck:
Diese Methode gibt eine PyArrow-Tabelle zurück, die die Zeilen des
ResultBatch-Objekts enthält.- Parameter:
Keine.
- Rückgabewerte:
Gibt eine PyArrow-Tabelle zurück, die die Zeilen aus dem
ResultBatch-Objekt enthält.Wenn keine Zeilen vorhanden sind, wird „None“ zurückgegeben.
- to_pandas()¶
- Zweck:
Diese Methode gibt einen pandas-DataFrame zurück, der die Zeilen des
ResultBatch-Objekts enthält.- Parameter:
Keine.
- Rückgabewerte:
Gibt einen pandas-DataFrame zurück, der die Zeilen aus dem
ResultBatch-Objekt enthält.Wenn keine Zeilen vorhanden sind, wird ein leerer pandas-DataFrame zurückgegeben.
Objekt: ResultMetadata¶
Ein ResultMetadata-Objekt repräsentiert Metadaten über eine Spalte im Resultset. Eine Liste dieser Objekte wird durch das Attribut description und die Methode describe des Objekts Cursor-Objekts zurückgegeben.
Dieses Objekt wurde in Version 2.4.6 des Snowflake-Konnektors für Python eingeführt.
Methoden¶
Keine.
Attribute¶
- name¶
Name der Spalte
- display_size¶
Nicht verwendet. Wie „internal_size“.
- internal_size¶
Interne Datengröße.
- precision¶
Genauigkeit der numerischen Daten.
- scale¶
Dezimalstellenzahl der numerischen Daten.
- is_nullable¶
True, wenn NULL-Werte für die Spalte erlaubt sind, ansonstenFalse.
Modul: snowflake.connector.constants¶
Das Modul snowflake.connector.constants definiert Konstanten, die von der API verwendet werden.
Enumerationen¶
- class QueryStatus¶
Repräsentiert den Status einer asynchronen Abfrage. Diese Enumeration hat die folgenden Konstanten:
Enumerationskonstante
Beschreibung
RUNNING
Die Abfrage wird noch ausgeführt.
ABORTING
Die Abfrage wird auf Serverseite gerade abgebrochen.
SUCCESS
Die Abfrage wurde erfolgreich abgeschlossen.
FAILED_WITH_ERROR
Die Abfrage wurde erfolglos beendet.
QUEUED
Die Abfrage wartet in Warteschlange auf Ausführung, normalerweise weil sie auf Ressourcen wartet.
DISCONNECTED
Die Verbindung der Sitzung ist unterbrochen. Der Status der Abfrage wird bald in „FAILED_WITH_ERROR“ geändert.
RESUMING_WAREHOUSE
Das Warehouse wird gestartet, und die Abfrage wird noch nicht ausgeführt.
BLOCKED
Die Anweisung wartet auf eine Sperre, die von einer anderen Anweisung gehalten wird.
NO_DATA
Daten zur Anweisung sind noch nicht verfügbar, normalerweise, weil die Ausführung der Anweisung noch nicht begonnen hat.
Modul: snowflake.connector.pandas_tools¶
Das Modul snowflake.connector.pandas_tools bietet Funktionen für die Arbeit mit der pandas-Datenanalysebibliothek.
Weitere Informationen dazu finden Sie in der Dokumentation zu pandas Datenanalyse-Bibliothek.
Funktionen¶
- write_pandas(parameters...)¶
- Zweck:
Schreibt einen pandas-DataFrame in die Tabelle einer Snowflake-Datenbank.
Zum Schreiben der Daten in die Tabelle speichert die Funktion die Daten in Parquet-Dateien, lädt diese Dateien mit dem Befehl PUT in einen temporären Stagingbereich hoch und kopiert die Daten mit dem Befehl COPY INTO <Tabelle> aus den Dateien in die Tabelle. Mithilfe bestimmter Funktionsparameter können Sie steuern, wie die Anweisungen
PUTundCOPY INTO <Tabelle>ausgeführt werden.- Parameter:
Die gültigen Eingabeparameter sind:
Parameter
Erforderlich
Beschreibung
connJa
Connection-Objekt, das die Verbindungsinformationen zur Snowflake-Datenbank enthält.dfJa
pandas.DataFrame-Objekt, das die Daten enthält, die in die Tabelle kopiert werden sollen.table_nameJa
Name der Tabelle, in die die Daten kopiert werden sollen.
databaseName der Datenbank, die die Tabelle enthält. Standardmäßig schreibt die Funktion Daten in die Datenbank, die in der aktuellen Sitzung verwendet wird. Hinweis: Wenn Sie diesen Parameter angeben, müssen Sie auch den Parameter
schemaangeben.schemaName des Schemas, das die Tabelle enthält. Standardmäßig schreibt die Funktion Daten in die Tabelle des Schemas, das in der aktuellen Sitzung verwendet wird.
bulk_upload_chunksDas Einstellen dieses Parameters auf
Trueändert das Verhalten derwrite_pandas-Funktion wie folgt: Zunächst werden alle Datenblöcke auf die lokale Festplatte geschrieben und dann den Platzhalter-Upload des Blockordners in den Stagingbereich durchgeführt. Bei der Einstellung aufFalse(Standard) werden die Blöcke nacheinander gespeichert, hochgeladen und gelöscht.chunk_sizeAnzahl der Elemente, die gleichzeitig eingefügt werden sollen. Standardmäßig fügt die Funktion alle Elemente gleichzeitig in einen Block ein.
compressionDer für die Parquet-Dateien zu verwendende Komprimierungsalgorithmus. Sie können entweder
"gzip"für eine bessere Komprimierung oder"snappy"für eine schnellere Komprimierung angeben. Standardmäßig verwendet die Funktion"gzip".on_errorGibt an, wie Fehler behandelt werden sollen. Setzen Sie den Parameter auf einen der Zeichenfolgenwerte, die in der
ON_ERROR-Kopieroption dokumentiert sind. Standardmäßig verwendet die Funktion"ABORT_STATEMENT".parallelAnzahl der Threads, die beim Hochladen der Parquet-Dateien in den temporären Stagingbereich verwendet werden sollen. Weitere Informationen zur Standardanzahl der verwendeten Threads und zu den Richtlinien für die Auswahl der Threadanzahl finden Sie unter den Parallelitätsparametern des PUT-Befehls.
quote_identifiersWenn
False, wird verhindert, dass der Konnektor doppelte Anführungszeichen um Bezeichner herum ausgibt, bevor die Bezeichner an den Server gesendet werden. Standardmäßig setzt der Konnektor doppelte Anführungszeichen um Bezeichner.- Rückgabewerte:
Gibt ein Tupel von
(success, num_chunks, num_rows, output)zurück, wobei:successistTrue, wenn die Funktion die Daten erfolgreich in die Tabelle geschrieben hat.num_chunksist die Anzahl der Datenblöcke, die die Funktion kopiert hat.num_rowsist die Anzahl der Zeilen, die von der Funktion eingefügt wurden.outputist die Ausgabe des BefehlsCOPY INTO <Tabelle>.
- Beispiel:
Im folgenden Beispiel werden die Daten von einem pandas-DataFrame in die Tabelle „customers“ geschrieben.
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...)¶
- Zweck:
pd_writerist eine Einfügemethode zum Einfügen von Daten in eine Snowflake-Datenbank.Wenn Sie
pandas.DataFrame.to_sqlaufrufen, übergeben Siemethod=pd_writer, um anzugeben, dass Siepd_writerals Methode zum Einfügen von Daten verwenden möchten. (Sie müssenpd_writernicht über Ihren eigenen Code aufrufen. Die Methodeto_sqlruftpd_writerauf und übergibt die erforderlichen Eingabeparameter.)Weitere Informationen dazu finden Sie unter:
Einfügemethode-Dokumentation.
pandas-Dokumentation.
Bemerkung
Beachten Sie, dass Sie die Spaltennamen in doppelten Anführungszeichen einschließen müssen, wenn die Spaltennamen im Pandas-
DataFramenur Kleinbuchstaben enthalten; andernfalls löst der Konnektor einenProgrammingErroraus.Die Bibliothek
snowflake-sqlalchemyschließt beim Erstellen einer Tabelle Spaltennamen in Kleinbuchstaben nicht in Anführungszeichen ein, währendpd_writerSpaltennamen standardmäßig in Anführungszeichen setzt. Das Problem tritt auf, weil der COPY INTO-Befehl erwartet, dass Spaltennamen in Anführungszeichen gesetzt werden.An der Bibliothek
snowflake-sqlalchemysind Verbesserungen geplant.Beispiel:
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)
Die Funktion
pd_writerverwendet die Funktionwrite_pandas(), um die Daten aus dem DataFrame in die Snowflake-Datenbank zu schreiben.- Parameter:
Die gültigen Eingabeparameter sind:
Parameter
Erforderlich
Beschreibung
tableJa
pandas.io.sql.SQLTable-Objekt für die Tabelle.connJa
sqlalchemy.engine.Engine- odersqlalchemy.engine.Connection-Objekt, das die Verbindungsinformationen zur Snowflake-Datenbank enthält.keysJa
Namen der Tabellenspalten für die einzufügenden Daten.
data_iterJa
Iterator für die Zeilen mit den einzufügenden Daten.
- Beispiel:
Im folgenden Beispiel wird
method=pd_writeran die Methodepandas.DataFrame.to_sqlübergeben, die wiederum die Funktionpd_writeraufruft, um die Daten aus dem pandas-DataFrame in eine Snowflake-Datenbank zu schreiben.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)
Unterstützung von Datums- und Zeitstempel¶
Snowflake unterstützt mehrere DATE- und TIMESTAMP-Datentypen, und der Snowflake-Konnektor ermöglicht das Binden von nativen datetime- und date-Objekten für Aktualisierungs- und Abrufoperationen.
Abrufen von Daten¶
Beim Abrufen von Datums- und Uhrzeitdaten werden die Snowflake-Datentypen in Python-Datentypen umgewandelt:
Snowflake-Datentypen |
Python-Datentyp |
Verhalten |
|---|---|---|
TIMESTAMP_TZ |
Ruft Daten ab, einschließlich Zeitzonenoffset, und übersetzt sie in ein |
|
TIMESTAMP_LTZ, TIMESTAMP |
Ruft Daten ab, übersetzt sie in ein |
|
TIMESTAMP_NTZ |
Ruft Daten ab und übersetzt sie in ein |
|
DATE |
Ruft Daten ab und übersetzt sie in ein |
Bemerkung
tzinfo ist ein auf der UTC-Abweichung basierendes Zeitzonenobjekt ohne IANA-Zeitzonennamen. Die Zeitzonennamen stimmen möglicherweise nicht überein, aber gleichwertige, abweichungsbasierte Zeitzonenobjekte gelten als identisch.
Aktualisieren von Daten¶
Beim Aktualisieren von Datums- und Uhrzeitdaten werden die Python-Datentypen in Snowflake-Datentypen umgewandelt:
Python-Datentyp |
Snowflake-Datentypen |
Verhalten |
|---|---|---|
datetime |
TIMESTAMP_TZ, TIMESTAMP_LTZ, TIMESTAMP_NTZ, DATE |
Konvertiert ein datetime-Objekt in eine Zeichenfolge im Format |
struct_time |
TIMESTAMP_TZ, TIMESTAMP_LTZ, TIMESTAMP_NTZ, DATE |
Konvertiert ein struct_time-Objekt in eine Zeichenfolge im Format |
date |
TIMESTAMP_TZ, TIMESTAMP_LTZ, TIMESTAMP_NTZ, DATE |
Konvertiert ein Datumsobjekt in eine Zeichenfolge im Format |
time |
TIMESTAMP_TZ, TIMESTAMP_LTZ, TIMESTAMP_NTZ, DATE |
Wandelt ein Zeitobjekt in eine Zeichenfolge im Format |
timedelta |
TIMESTAMP_TZ, TIMESTAMP_LTZ, TIMESTAMP_NTZ, DATE |
Konvertiert ein Timedelta-Objekt in eine Zeichenfolge im Format |