Impostazione di un Fiocco di neve converter_class Ancora Converte in Python Tipi di Dati

0

Domanda

Nella documentazione per il python Fiocco di neve connettore, si dice che l'impostazione del parametro di connessione converter_class quando si crea l'oggetto di connessione può essere utilizzata per sopprimere la conversione a tipi di python (foglie di dati come stringhe). Ma non vedo nessuna differenza tra le query eseguite con i seguenti due connessioni (utilizzando snowflake-connector-python=2.7.0):

from snowflake.connector.converter_null import SnowflakeNoConverterToPython

DBH1 = snowflake.connector.connect(
       user='username',
       password='password',
       account='account',
       converter_class=SnowflakeNoConverterToPython      # why isn't this working?
    )

DBH2 = snowflake.connector.connect(
       user='username',
       password='password',
       account='account'
    )

Le query eseguite da entrambi DBH1 e DBH2 ritorno di timestamp come python datetime oggetti, e non stringhe. Ho notato che il doc su snowflake.connector parametri, non vi è alcuna menzione di un converter_class opzione - questo trucco è solo elencati nella sezione "ottimizzazione dei dati di tira" sezione qui: https://docs.snowflake.com/en/user-guide/python-connector-example.html#improving-query-performance-by-bypassing-data-conversion. È possibile che questa funzione è stata eliminata senza ripulire il doc?

1

Migliore risposta

1

Quando questa funzionalità è stata aggiunta inizialmente era previsto solo per i JSON set di risultati di formato. Da allora abbiamo migrato i set di risultati per FRECCIA e per questo formato non funziona, infatti (FRECCIA è formato predefinito per ora).

Per dimostrare io uso questo codice:

ctx = snowflake.connector.connect(
        user=USER,
        password=PASSWORD,
        account=ACCOUNT,
        role=ROLE,
        database=DATABASE,
        schema=SCHEMA,
        warehouse=WAREHOUSE,
        converter_class=SnowflakeNoConverterToPython
        )

cs = ctx.cursor()

try:
        cs.execute("SELECT CURRENT_TIMESTAMP()")
        res  = cs.fetchone()
        print(f'{res[0]}')
        print(type(res[0]))
        print(isinstance(res[0], str))

Questo restituisce a me:

2021-11-24 21:34:44.314000+13:00
<class 'datetime.datetime'>
False

Ora, posso cambiare il risultato di un set formato originale JSON:

try:
        cs.execute("alter session set python_connector_query_result_format='JSON'")
        cs.execute("SELECT CURRENT_TIMESTAMP()")

Questa volta ho fatto io:

1637742958.657000000
<class 'str'>
True

La FRECCIA formato ha diversi vantaggi oltre JSON e si può leggere di più qui

2021-11-24 08:37:12

In altre lingue

Questa pagina è in altre lingue

Русский
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................