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

DuckDB参数绑定失效求助:使用$input_file报错找不到文件

问题分析与解决

问题根源

你遇到的错误是因为参数占位符被当成了字面量文件名。DuckDB的参数绑定机制中,$input_file这类占位符不能被包裹在单引号里——一旦加了引号,DuckDB就会把$input_file当作实际的文件名去查找,而不是解析为你传入的参数值,自然会提示找不到匹配的文件。

解决方案

去掉$input_file外面的单引号,让DuckDB识别这是一个参数占位符,而非字面量字符串。参数绑定的占位符不需要额外的引号包裹,DuckDB会自动根据你传入的参数类型处理转换。

修正后的可运行代码

import json
import duckdb

# 假设input_file是你的JSON文件路径
input_file = "path/to/your/logs.json"

con = duckdb.connect()
con.execute(
    "CREATE TABLE log_data AS SELECT * FROM read_json($input_file, "
    "json_format='auto',"
    "auto_detect=false,"
    f"columns={json.dumps({'id': 'varchar', '@timestamp': 'varchar', '@version': 'varchar', 'message': 'varchar'})})",
    {'input_file': input_file},
)

额外说明

如果需要更严格的SQL注入防护,也可以使用?作为匿名占位符,对应的参数传入列表即可:

con.execute(
    "CREATE TABLE log_data AS SELECT * FROM read_json(?, "
    "json_format='auto',"
    "auto_detect=false,"
    f"columns={json.dumps({'id': 'varchar', '@timestamp': 'varchar', '@version': 'varchar', 'message': 'varchar'})})",
    [input_file],
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 11:57:25