当前位置: 首页 > 知识库问答 >
问题:

雪花:Sqlalchemy ORM更新变体字段

许奇
2023-03-14
data = db.Column(snowsql.VARIANT)

有人有做这事的经验吗?

更新:

我要添加的数据是一个字典的python列表:

new_data['data'] = [{'component': None, 'display_name': 'blah', 'key': None, 'row': {'display_name': 'blah', 'type': 'blah'}, 'sub_type': None, 'type': 'blah'}]
new_blah = Blah(
  data = json.dumps(new_data['data'])
)
"[{\"component\":null,\"display_name\":\"blah\",\"key\":null,\"row\":{\"display_name\":\"blah\",\"type\":\"blah\"},\"sub_type\":null,\"type\":\"blah\"}]"

共有1个答案

芮建茗
2023-03-14

据我所知,你正在尝试的目前是不可能的。我也遇到了同样的问题,尽管我对SQLAlchemy自定义类型有了很大的了解,但我目前无法解决它。

问题如下:

  1. 要插入到variant列中,需要使用雪花函数parse_json.
  2. 要使用上述函数,您需要处于select子句的上下文中,即不能将其与insert...values格式一起使用(请参见雪花社区)
class SnowflakeJSON(TypeDecorator):
    impl = VARIANT

    def process_bind_param(self, value, dialect):
        return json_serialize(value)

    def process_result_value(self, value, dialect):
        return json_deserialize(value)

    def bind_expression(self, bindparam):
        return func.PARSE_JSON(bindparam, type_=self)

    def copy(self, **kw):
        return SnowflakeJSON()
INSERT INTO my_table (key, data) 
VALUES ('001', PARSE_JSON('{"test": "hello world"}'));

但是,根据上面的雪花社区条目,values格式不起作用,您需要以下格式:

INSERT INTO my_table (key, data) 
SELECT '001', PARSE_JSON('{"test": "hello world"}');

作为后退,您可以始终使用将JSON对象存储为varchar的列类型:

class SnowflakeJSON(TypeDecorator):
    impl = String

    def process_bind_param(self, value, dialect):
        return json_serialize(value)

    def process_result_value(self, value, dialect):
        return json_deserialize(value)

    def copy(self, **kw):
        return SnowflakeJSON()

这样,您显然失去了将JSON字符串存储为variant数据类型的好处。但是,您可以在以后的阶段,甚至在查询中对其进行解析:

SELECT PARSE_JSON(text)['test'] from my_table;
 类似资料:
  • 使用odbctest和Snowflake 64位ODBC驱动程序for Windows: 这是odbc跟踪的相关部分: sqdrsvc 3dfc-52bc输入SQLPrepare HSTMT 0x000000435c961620 UCHAR*0x000000435d262720[140]“插入”sfdest“.”qauser“.”bt14726“(”varchar_10_col“,”varchar

  • 如何使用雪花存储过程将current_date()bind变量插入到表中 创建或替换过程abc(“p_message_id”浮点数、“p_theater”字符串、“p_month”字符串、“p_message”字符串、“p_message”字符串、“p_start_date”字符串、“p_end_date”字符串、“p_action”字符串、“p_msg_type”字符串、“p_logged_us

  • 我试图使用以下代码将数据加载到雪花,但得到一个错误。 tmp是从Snowflake下载的,该表使用RStudio:

  • 我正在搜索TABLE命令的官方文档(它与TABLE( ))不同。 我搜索了所有命令/查询语法,但没有太多成功。

  • 我在收集元数据stom雪花-“帐户使用视图”时发现,表中的值(ROW_COUNT,BYTES)没有更新。我预计会有一些延迟,但对于大多数对象,我的值为“0”。我必须清楚地说明,那些桌子并不是新的。他们在那里好几个月了。 在与information_schema.tables进行比较时,我看到了最新的数字。其他(也是ACCOUNT_USAGE)视图TABLE_STORAGE_METRICS至少显示有