将sql映射到python

时间:2013-07-16 10:16:11

标签: python sql dsl

我正在尝试将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中表达限制函数的方式很麻烦而且不是很优雅,所以我希望有人能以更优雅的方式帮助表达它。

1 个答案:

答案 0 :(得分: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