我有一个非常大的数据库,我正在使用,我需要知道如何选择一组没有任何实际模式的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()
Run Code Online (Sandbox Code Playgroud)
我在想,必须有一个更快的方法来做到这一点......我的意思是我的脚本需要搜索一个拥有超过400万id的数据库.有没有办法可以使用select命令一次性抓取它们.我可以使用带有id列表的where语句吗?谢谢
您可以使用IN同时查找多个项目:
SELECT * FROM Table WHERE id IN (x, y, z, ...)
Run Code Online (Sandbox Code Playgroud)
所以也许是这样的:
sql = "select * from Table where id in (%s)" % (', '.join(str(id) for id in longIdList))
Run Code Online (Sandbox Code Playgroud)
是的,您可以使用SQL的IN()谓词将列与一组值进行比较.这是标准SQL,并且每个SQL数据库都支持它.
在IN()谓词过于低效或仅仅超过SQL查询的长度限制之前,可以在谓词中放置的值的数量存在实际限制.最大的实用值列表取决于您使用的数据库(在Oracle中它是1000,MS SQL Server在2000左右).我的感觉是,如果你的名单超过几十个值,我会寻求另一个解决方案.
例如,@ ngroot建议在他的答案中使用临时表.有关此解决方案的分析,请参阅本博客StackOverflow常规@Quassnoi:在MySQL中传递参数:IN列表与临时表.
将值列表参数化为SQL查询是一种安全的方法,这可能很棘手.您应该注意SQL注入的风险.
另请参阅Stack Overflow上的这个热门问题: 参数化SQL IN子句?
| 归档时间: |
|
| 查看次数: |
3272 次 |
| 最近记录: |