Definição de floco de Neve converter_class Ainda Converte para Python Tipos de Dados

0

Pergunta

No google docs para o python floco de Neve conector, ele diz que a definição do parâmetro de conexão converter_class ao criar o objeto de conexão pode ser utilizado para suprimir a conversão para o python (tipos de folhas de dados como seqüências de caracteres). Mas eu não vejo nenhuma diferença entre consultas executadas com as seguintes duas conexões (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'
    )

Consultas executadas a partir ambos DBH1 e DBH2 retorno carimbos de data / hora como python datetime objetos, e não com cadeias de caracteres. Notei que em doc snowflake.connector parâmetros, não há nenhuma menção de um converter_class opção - este truque só é listado em "otimização de dados puxa" a seção aqui: https://docs.snowflake.com/en/user-guide/python-connector-example.html#improving-query-performance-by-bypassing-data-conversion. É possível que este recurso tenha sido interrompida sem limpar o doc?

1

Melhor resposta

1

Quando esse recurso foi adicionado inicialmente era apenas para JSON conjunto de resultados formato. Desde então migramos conjunto de resultados para a SETA e, para isso, o formato não funciona de fato (SETA é o formato padrão agora).

Para demonstrar que eu use 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))

Este devolve-me:

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

Agora, posso mudar o conjunto de resultados formato original JSON:

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

Desta vez eu recebo:

1637742958.657000000
<class 'str'>
True

A SETA formato tem várias vantagens sobre JSON e você pode ler mais aqui

2021-11-24 08:37:12

Em outros idiomas

Esta página está em outros idiomas

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