Skip to main content
 首页 » 编程设计

python之使用 IN 和 python 列表构建 SQL 查询字符串

2025年05月04日36lyj

我建立了一个 pandas 感兴趣的值列表。

table1 = pd.read_csv("logswithIPs.csv") 
cips = data_dash['ip'].unique().tolist() 
print(cips[:10]) 
['111.111.111.111', '123.123.123.123', '122.122.122.122', '2.2.2.2', '3.3.3.3', '4.4.4.4', '5.5.5.5'...''] 

既然我有了上面的列表,我想看看这些 IP 是否存在于我的 SQL 数据库的表中。

filterIPs = pd.read_sql("select count(*) as count, url from "+table2+" where c_ip in "+cips+" group by url",conn) 

具体来说,我的问题在于我的语法 c_ip in "+cips+":

TypeError: Can't convert 'list' object to str implicitly 

如何在我的 SQL 查询中正确包含该列表?

***编辑

所以我终于让它工作了,看起来 pandas 不需要列表它需要字符串。

所以我 cipTup = 元组(cips)。 然后在我的查询中我做了..

where c_ip in "+str(cipTup)"  

它奏效了。

我的猜测是 pandas 知道如何将这样的字符串视为列表。?

请您参考如下方法:

我会将 data_dash['ip'].unique() 导出/保存为 SQL 表,以便它可以有效地用于子查询:

pd.DataFrame({'ip':data_dash['ip'].unique()}).to_sql('tmp_ip', conn, if_exists='replace') 

现在您可以在 SQL DB 端使用它:

qry = """ 
select count(*) as count, url 
from tab_name 
where c_ip in (select ip from tmp_ip) 
group by url 
""" 
 
filterIPs = pd.read_sql(qry, conn)