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

Python中如何用f-String在SQLite查询中正确传递参数?

解决SQLite查询中f-String传递字符串参数的问题

你遇到的问题是因为用f-String直接拼接字符串参数时,生成的SQL语句里ACURA没有被引号包裹,SQLite将其识别为列名而非label列的取值,所以抛出了"no such column: ACURA"的错误。

推荐方案:使用参数化查询(安全且无语法问题)

pandas的read_sql支持参数化查询,不需要手动拼接SQL语句,既能解决引号问题,还能避免SQL注入风险,是最优解:

import pandas as pd
import sqlite3

def query_brand(filter_val):
    # 用?作为占位符,通过params传递参数
    sql_result = pd.read_sql('SELECT * FROM ps_lss_brands WHERE label = ?', 
                            self.conn_brand, 
                            params=(filter_val,))
    # read_sql返回的已是DataFrame,直接筛选需要的列即可
    df = sql_result[['id_brand', 'label']]
    print(df)

query_brand("ACURA")

临时方案:手动添加引号(不推荐,存在SQL注入风险)

如果非要用f-String拼接,需要给参数值加上单引号,确保SQL将其识别为字符串:

import pandas as pd
import sqlite3

def query_brand(filter_val):
    # 注意:该方式存在SQL注入风险,若参数包含单引号会触发语法错误
    sql_result = pd.read_sql(f"SELECT * FROM ps_lss_brands WHERE label = '{filter_val}'", 
                            self.conn_brand)
    df = sql_result[['id_brand', 'label']]
    print(df)

query_brand("ACURA")

另外注意:原代码中pd.DataFrame(sql_query, columns=['id_brand', 'label'])是多余的,pd.read_sql执行后直接返回DataFrame,无需再次转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 22:55:17