【问题标题】:Snowflake Python connector insert doesn't accept variables雪花 Python 连接器插入不接受变量
【发布时间】:2026-01-27 17:35:02
【问题描述】:

我正在尝试使用雪花连接器在表格中插入一条记录。

在雪花doc 中,他们展示了带有硬编码字符串的示例,但是当我尝试使用我的变量时,它不起作用。请建议在这种情况下如何使用变量。

conn.cursor().execute(
            "INSERT INTO cm.crawling_metrics(FEED_DATE,COMP_NAME,REFRESH_TYPE,CRAWL_INPUT,CRAWL_SUCCESS) VALUES " +
            "(score_creation_date,compName,sRefreshType,mp_sku_count,comp_sku_count)"

我收到以下错误

snowflake.connector.errors.ProgrammingError: 000904 (42000): SQL 编译错误:位置 100 的错误行 1 无效标识符“SCORE_CREATION_DATE”

注意:在上面的代码中,如果我用字符串而不是变量进行硬编码,它可以工作。

请提出正确的方法是什么?

【问题讨论】:

    标签: python-3.x snowflake-cloud-data-platform snowflake-schema


    【解决方案1】:

    您需要为您的代码使用字符串插值/格式化以将这些用作实际变量:

    conn.cursor().execute(
        "INSERT INTO cm.crawling_metrics (FEED_DATE, COMP_NAME, REFRESH_TYPE, CRAWL_INPUT, CRAWL_SUCCESS) VALUES " +
        f"('{score_creation_date}', '{compName}', '{sRefreshType}', '{mp_sku_count}', '{comp_sku_count}')"
    )
    

    【讨论】:

    • 你能解释一下为什么上面的字符 f 吗?是错字吗?
    • 我尝试了以下但没有工作 conn.cursor().execute("INSERT INTO cm.crawling_metrics(FEED_DATE,COMP_NAME,REFRESH_TYPE,CRAWL_INPUT,CRAWL_SUCCESS) VALUES " + "({score_creation_date} ,{compName},{sRefreshType},{mp_sku_count},{comp_sku_count})" ) 在位置 101 意外'score_creation_date' 处出现错误语法错误第 1 行。位置 123 处的语法错误第 1 行意外的“compName”。位置 134 处的语法错误第 1 行意外'sRefreshType'。
    • @VinodJayachandran f 用于 Python 的 string interpolation。在将字符串传递给execute 之前尝试将字符串分配给变量,以查看生成的完整查询。你运行的是哪个 Python 版本?
    • 由于数据库插入期间数据类型不匹配而失败。在 {variable} 周围添加了单引号以进行适当的数据类型转换。也更新了答案。
    • 非常感谢。你让我开心。