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

DuckDB中如何在COPY TO语句中用参数传递文件名?

DuckDB导出Parquet时传递文件名的解决方法

DuckDB的参数化查询(?占位符)仅支持替换查询中的数据值(如WHERE子句的条件值),无法直接用于替换文件名、表名这类SQL语法中的路径或标识符,这就是你遇到语法错误的原因。以下是两种可行的解决方法:

方法1:用duckdb.quote安全格式化文件名

通过duckdb.quote对文件名进行转义,既能避免SQL注入风险,又能让文件名正确嵌入COPY语句中:

import duckdb

def table2parquet(con, filename):
    con.execute(
        f"""
        COPY
            (SELECT ...)
        TO
            {duckdb.quote(filename)} (FORMAT PARQUET)
        """
    )

方法2:使用con.sql方法绑定参数

DuckDB的sql方法对路径类参数的支持更友好,可直接用?占位符传递文件名:

def table2parquet(con, filename):
    con.sql(
        """
        COPY (SELECT ...) TO ? (FORMAT PARQUET)
        """,
        parameters=[filename]
    )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 13:46:01