2013-07-16 56 views
0

我试图表达SQL查询,Python代码,但我有麻烦表达限制功能SQL映射到Python

我代表了一个Python SQL表作为

[{'col1':val, 'col2':val,...},...] 

下面的SQL表达式

SELECT x.val, y.val 
FROM R x, S y 
WHERE x.id = y.id 

然后将在Python中表示为

for x in R: 
    for y in S: 
     if x["id"] == y["id"]: 
     x["val"], y["val"] 

如果我想限制输出到10行,我可以那么写

i = 0 
for x in R: 
    for y in S: 
     if x["id"] == y["id"]: 
     x["val"], y["val"] 
     i += 1 
     if i == 10: 
      break 
    if i == 10: 
     break 

我在Python表达限制功能的方式是麻烦,不是很优雅,所以我希望有人能帮助表达这以更优雅的方式。

回答

0

你会使用迭代,列表推导或发电机和itertools module

from itertools import product, islice 

# all values, generator expression 
query = ((x['val'], y['val']) for x, y in product(R, S) if x['id'] == y['id']) 

# just the first 10 
limited = islice(query, 10) 

for row in limited: 
    print row