【问题标题】:How to access attributes inside a variant column using snowflake-sqlalchemy?如何使用 snowflake-sqlalchemy 访问变体列内的属性?
【发布时间】:2023-01-21 01:35:58
【问题描述】:

使用 snowflake-sqlalchemy 库,是否有任何我可以访问变体列内的属性并在查询中使用它们? 示例:- 如果我有下表,

example = Table('example', metadata,
    Column('id', Integer, primary_key=True),
    Column('data', VARIANT)
)

数据是变体列,我如何编写查询来选择数据的属性,如下所示:-

query = select(example.data['key'])

我尝试了多种组合:- example.data['key']example.data.key,但似乎没有任何效果。首先有可能吗?如果是这样,我该怎么做?

【问题讨论】:

    标签: sqlalchemy snowflake-cloud-data-platform query-builder


    【解决方案1】:

    Using the Snowflake SQLAlchemy Toolkit with the Python Connector - VARIANT, ARRAY, and OBJECT Support:

    Snowflake SQLAlchemy 支持抓取变体, ARRAY 和 OBJECT 数据类型。所有类型都在 Python 中转换为 str 以便您可以使用将它们转换为本机数据类型json.loads。

    此示例说明如何创建包含 VARIANT、ARRAY 和 OBJECT 数据类型列的表:

    from snowflake.sqlalchemy import (VARIANT, ARRAY, OBJECT)
    ...
    t = Table('my_semi_structured_datatype_table', metadata,
        Column('va', VARIANT),
        Column('ob', OBJECT),
        Column('ar', ARRAY))
    metdata.create_all(engine)
    

    为了检索 VARIANT、ARRAY 和 OBJECT 数据类型列并将它们转换为本机 Python 数据类型,获取数据并调用 json.loads 方法,如下所示:

    import json
    connection = engine.connect()
    results = connection.execute(select([t]))
    row = results.fetchone()
    data_variant = json.loads(row[0])
    data_object  = json.loads(row[1])
    data_array   = json.loads(row[2])
    

    【讨论】:

      猜你喜欢
      • 2021-08-28
      • 1970-01-01
      • 2020-07-16
      • 1970-01-01
      • 2012-07-02
      • 2023-01-27
      • 2021-09-28
      • 1970-01-01
      • 2020-06-13
      相关资源
      最近更新 更多