Configuración de Copo de nieve converter_class Todavía Convierte a Python Tipos de Datos

0

Pregunta

En la documentación de python Copo de nieve conector, se dice que la configuración de los parámetros de conexión de converter_class a la hora de crear el objeto de conexión puede utilizarse para suprimir la conversión a python tipos (hojas de datos como cadenas). Pero no veo ninguna diferencia entre la ejecución de consultas con las siguientes dos conexiones (usando 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'
    )

Las consultas ejecutadas tanto DBH1 y DBH2 retorno de las marcas de tiempo como python objetos datetime, y no cadenas. Me di cuenta de que en el doc en snowflake.connector parámetros, no hay ninguna mención de un converter_class opción - este truco es sólo aparece en la "optimización de los datos de la tira de la sección" aquí: https://docs.snowflake.com/en/user-guide/python-connector-example.html#improving-query-performance-by-bypassing-data-conversion. Es posible que esta característica ha sido dejado sin limpiar el doc?

1

Mejor respuesta

1

Cuando esta característica se agregó que inicialmente estaba destinado sólo para JSON conjunto de resultados formato. Desde entonces hemos migrado conjunto de resultados de FLECHA y para este formato no funciona, de hecho (FLECHA es el formato por defecto ahora).

Para demostrar que el uso de este código:

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))

Esto vuelve a mí:

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

Ahora, puedo cambiar el conjunto de resultados formato de volver a la original JSON:

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

Esta vez llego:

1637742958.657000000
<class 'str'>
True

La FLECHA de formato tiene varias ventajas sobre JSON y puedes leer más aquí

2021-11-24 08:37:12

En otros idiomas

Esta página está en otros idiomas

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