我有一个非常大的数据库,我需要知道如何选择一个没有任何实际模式的大的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列表吗?谢谢
以某种方式序列化列表(逗号分隔或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
同时查找多个项目:所以可能是这样的:
^{pr2}$相关问题 更多 >
编程相关推荐