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
相关产品推荐
相关产品推荐

