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

2024-09-28 03:22:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个非常大的数据库,我需要知道如何选择一个没有任何实际模式的大的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的数据库。有没有一种方法可以让我用select命令一次抓取所有的id。我可以使用where语句和id列表吗?谢谢


Tags: 方法infromid数据库forsql代码段
3条回答

以某种方式序列化列表(逗号分隔或XML是合理的选择),然后在另一端有一个存储过程,该存储过程将列表反序列化为临时表。然后可以对临时表执行内部联接。在

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

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

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

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

另请参阅有关堆栈溢出的流行问题:Parameterizing a SQL IN clause?

您可以使用IN同时查找多个项目:

SELECT * FROM Table WHERE id IN (x, y, z, ...)

所以可能是这样的:

^{pr2}$

相关问题 更多 >

    热门问题