如何使用snowflake-sqlalchemy访问Variant列中的属性?
访问Snowflake Variant列属性的SQLAlchemy查询方法
可行,snowflake-sqlalchemy支持查询Variant列的属性,你之前的写法无效是因为SQLAlchemy的Column对象默认未适配Snowflake的Variant语法,可通过以下两种方式实现:
方法1:使用Snowflake的GET函数(推荐)
通过SQLAlchemy的func调用Snowflake原生的GET函数,语法简洁且适配性强:
from sqlalchemy import func, select # 构造查询,获取data列中的'key'属性 query = select( example.c.id, func.get(example.c.data, 'key').label('key_value') # 用label给结果起别名 )
如果是嵌套属性,可嵌套调用GET:
# 获取data['key']['subkey'] query = select(func.get(func.get(example.c.data, 'key'), 'subkey'))
方法2:用op方法构造原生Snowflake语法
Snowflake中Variant列支持data.key或data['key']的访问方式,可通过SQLAlchemy的op方法直接构造该语法:
# 使用点语法访问属性 query = select(example.c.data.op('.')('key')) # 使用中括号语法访问属性 query = select(example.c.data.op('[')('key').op(']')())
完整示例
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, select, func from snowflake.sqlalchemy import VARIANT # 初始化Snowflake连接 engine = create_engine('snowflake://<user>:<password>@<account>/<db>/<schema>?warehouse=<warehouse>') metadata = MetaData() # 定义表结构 example = Table('example', metadata, Column('id', Integer, primary_key=True), Column('data', VARIANT) ) # 执行查询 with engine.connect() as conn: result = conn.execute(select(func.get(example.c.data, 'key'))) for row in result: print(row[0])
内容的提问来源于stack exchange,提问作者Krishna Kanna
相关产品推荐
相关产品推荐

