Setarea Fulg de nea converter_class Încă Convertește la Tipurile de Date Python

0

Problema

În docs pentru python Fulg de nea conector, se spune că stabilirea conexiunii parametru converter_class atunci când crearea de obiect de conexiune poate fi folosit pentru a suprima conversie pentru python tipuri (frunze date ca șiruri). Dar nu văd nicio diferență între interogări rula cu următoarele două conexiuni (folosind 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'
    )

Interogări executate din ambele DBH1 și DBH2 reveni marcajele de timp ca python datetime obiecte, și nu siruri de caractere. Am observat că, în doc pe snowflake.connector parametrii, nu există nici o mențiune de un converter_class opțiune - acest truc este doar enumerate în "optimizarea datelor trage" secțiune aici: https://docs.snowflake.com/en/user-guide/python-connector-example.html#improving-query-performance-by-bypassing-data-conversion. Este posibil ca această caracteristică a fost lăsat fără curățarea doc?

1

Cel mai bun răspuns

1

Atunci când această caracteristică a fost adăugat inițial a fost destinat doar pentru JSON rezultat set format. De atunci am migrat set de rezultate la SĂGEATĂ și pentru acest format nu funcționează într-adevăr (SĂGEATĂ este format implicit acum).

Pentru a demonstra eu folosesc acest cod:

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

Acest lucru se întoarce la mine:

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

Acum, am schimba rezultatul set format înapoi la original JSON:

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

De această dată am obține:

1637742958.657000000
<class 'str'>
True

La SĂGEATĂ format are mai multe avantaje față de JSON și puteți citi mai multe aici

2021-11-24 08:37:12

În alte limbi

Această pagină este în alte limbi

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