You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python将TikTok API返回的数组写入Snowflake数据库?

解决TikTok API数组完整写入Snowflake的问题

问题根源

  1. 代码里用ad_group['age_groups'][0]只取了数组第一个元素,导致存储不完整
  2. INSERT语句语法错误,列名列表后未闭合括号
  3. executemany放在循环内部,会重复插入已有数据

修复步骤&代码

1. 修正数组取值逻辑

直接获取整个age_groups数组,不要取索引0的元素:

age_groups = ad_group.get('age_groups')  # 空数组会返回None,符合Snowflake VARIANT存储要求

2. 修复SQL语法错误

补上INSERT语句中列名列表的闭合括号:

INSERT INTO {adGroup_table} (
    adgroup_app_profile_page_state, adgroup_id, adgroup_name, advertiser_id, age_groups
) VALUES ( %s, %s, %s, %s, %s)

3. 调整批量插入执行时机

把executemany和commit移到循环外面,避免重复插入:

修改后的完整代码

if ad_group_data and 'list' in ad_group_data['data']:
    ad_group_list = ad_group_data['data']['list']
    
    adGroup_table = 'ADGROUP'
    adGroup_insert_query = f'''
    INSERT INTO {adGroup_table} (
        adgroup_app_profile_page_state, adgroup_id, adgroup_name, advertiser_id, age_groups
    ) VALUES ( %s, %s, %s, %s, %s)
    '''
    adGroup_data_to_insert = []
    for ad_group in ad_group_list:
        # 用get方法简化取值,不存在则返回None
        adgroup_app_profile_page_state = ad_group.get('adgroup_app_profile_page_state')
        adgroup_id = ad_group.get('adgroup_id')
        adgroup_name = ad_group.get('adgroup_name')
        advertiser_id = ad_group.get('advertiser_id')
        age_groups = ad_group.get('age_groups')  # 直接获取完整数组
        
        adgroup_data_tuple = (
            adgroup_app_profile_page_state,
            adgroup_id,
            adgroup_name,
            advertiser_id,
            age_groups
        )
        adGroup_data_to_insert.append(adgroup_data_tuple)
    
    # 所有数据准备好后批量插入,再提交事务
    cursor.executemany(adGroup_insert_query, adGroup_data_to_insert)
    conn.commit()

4. 确认Snowflake列类型

确保ADGROUP表的age_groups列是VARIANT类型,若未设置,执行以下SQL修改:

ALTER TABLE ADGROUP ALTER COLUMN age_groups SET DATA TYPE VARIANT;

这样就能把完整的年龄分组数组存入Snowflake了。

内容的提问来源于stack exchange,提问作者gourav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 23:33:15