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

SQLite3查询匹配指定列表值并导入Pandas DataFrame报错解决

问题解决方法

你的核心问题是SQL语句里的字符串ID没有加单引号,导致SQLite把C20这类值当成了列名,而非s_id列的字符串值,所以报错“no such column: C20”。调换IN的位置没用是因为SQL的语法规则就是列名 IN (值列表),反过来写不符合规范。

下面是两种可行的解决办法:

方法1:给ID添加单引号后拼接(简单但需注意特殊字符)

直接给每个ID字符串加上单引号,再拼接成SQL的IN条件:

import pandas as pd
import sqlite3

cnx = sqlite3.connect('c:/path/to/data.sqlite')

id_list = ['C20','C23','C25','C28','C83']
# 给每个ID包裹单引号
id_sql = ", ".join(f"'{x}'" for x in id_list)
df = pd.read_sql_query(f"SELECT * FROM table WHERE s_id IN ({id_sql})", cnx)

注意:如果你的ID里包含单引号(比如C'20),这种方法会导致SQL语法错误,此时更推荐方法2。

方法2:参数化查询(安全规范,推荐)

利用SQLite的参数占位符?,结合pandas的参数传递功能,避免直接拼接SQL字符串,同时彻底解决引号问题和SQL注入风险:

import pandas as pd
import sqlite3

cnx = sqlite3.connect('c:/path/to/data.sqlite')

id_list = ['C20','C23','C25','C28','C83']
# 生成和ID数量匹配的占位符
placeholders = ", ".join(["?"] * len(id_list))
# 构造带占位符的查询语句
query = f"SELECT * FROM table WHERE s_id IN ({placeholders})"
# 传递参数列表执行查询
df = pd.read_sql_query(query, cnx, params=id_list)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 06:36:18