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

Python中DuckDB的SQL查询引用参数/变量的语法问题

在DuckDB的SELECT语句中使用Python变量的正确方法

DuckDB在Python环境中支持几种引用外部变量的方式,以下是最常用的几种方案:

  • 参数化查询(推荐,安全防注入)
    使用?作为占位符,在query方法中通过parameters参数传入变量值:

    y = 2
    dk.query("SELECT * FROM DF WHERE x > ?", parameters=[y]).to_df()
    

    这种方式是DuckDB官方推荐的参数化方式,能有效避免SQL注入风险,同时适配各种数据类型。

  • Python格式化字符串(仅适用于可信变量)
    如果变量是完全可控、无安全风险的(比如固定值或内部生成的变量),可以用f-string直接拼接SQL语句:

    y = 2
    dk.query(f"SELECT * FROM DF WHERE x > {y}").to_df()
    

    注意:如果变量来自用户输入或不可信来源,绝对不要用这种方式,会导致SQL注入漏洞。

  • 注册变量为临时对象
    可以把Python变量注册为DuckDB能识别的临时对象,再在SQL中引用:

    import pandas as pd
    y = 2
    # 将变量注册为临时Series
    dk.register("y_var", pd.Series([y]))
    dk.query("SELECT * FROM DF WHERE x > (SELECT * FROM y_var)").to_df()
    

    或者通过SET命令设置DuckDB会话变量:

    y = 2
    dk.execute(f"SET y = {y}")
    dk.query("SELECT * FROM DF WHERE x > y").to_df()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 14:05:17