Skip to main content
 首页 » 编程设计

python之如何使用python在sql中选择一长串id

2025年05月04日9yyy_WW

我有一个非常大的数据库,我正在使用它,我需要知道如何选择一大组没有任何真实模式的 ID。这是我到目前为止的代码段:

longIdList = [1, 3, 5 ,8 ....................................] 
for id in longIdList 
    sql = "select * from Table where id = %s" %id 
    result = cursor.execute(sql) 
    print result.fetchone() 

我当时在想,一定有一种更快的方法来做到这一点……我的意思是我的脚本需要搜索一个拥有超过 400 万个 ID 的数据库。有没有一种方法可以让我使用选择命令一次将它们全部抓取。我可以使用带有 id 列表的 where 语句吗?谢谢

请您参考如下方法:

是的,您可以使用 SQL 的 IN() 谓词将列与一组值进行比较。这是标准 SQL,每个 SQL 数据库都支持它。

在 IN() 谓词变得效率太低或仅仅超过 SQL 查询的长度限制之前,您可以在其中放入的值的数量可能存在实际限制。最大的实用值列表取决于您使用的数据库(在 Oracle 中为 1000,在 MS SQL Server 中为 2000 左右)。我的感觉是,如果您的列表超过几十个值,我会寻求其他解决方案。

例如,@ngroot 建议在他的回答中使用临时表。关于此解决方案的分析,请参阅 StackOverflow 常规博客 @Quassnoi : Passing parameters in MySQL: IN list vs. temporary table .

以安全的方式将值列表参数化到 SQL 查询中可能很棘手。您应该注意 SQL injection 的风险.

另请参阅 Stack Overflow 上的这个热门问题:Parameterizing a SQL IN clause?