Python中的LINQ

是否有任何可以自动查询XML文件和/或RDBMS表的类似LINQ的Python项目? 在C#中,语法不一定非常像LINQ,但希望以pythonic的方式closures。

Pynq实现expression式树:

http://wiki.github.com/heynemann/pynq

Microsoft使用Expression树创build了Linq(语言集成查询),这是一个关于如何将操作parsing为树的math概念,以便您可以独立于结果分析操作。

Pynq是Expression Tree理论和一些提供者的Python实现。 逐渐会有更多的提供商,但是Pynq会努力使自己的提供商尽可能地容易。

如果你正在寻找一个ORM,那么就是SQLAlchemy

我还没有使用它,但是这显示了承诺:

asq是Python的一个简单的LINQ启发式API实现,可以在Python迭代器上运行,包括一个按照Python标准库多处理模块实现的并行版本。 API体育function与对象的LINQ相当,100%的语句testing覆盖率和全面的文档 。

如果你正在寻找跨语言的LINQ,它发生的地方是微软用Python,Ruby,javascript等实现的Reactive Extensions 。这需要LINQ,所以他们通常最终首先实现Linq操作符;)

  • 官方的Python版本在这里: https : //rxpy.codeplex.com/
  • 但是这里还有另一个端口: http : //akuendig.github.io/RxPython/

我不太了解Linq,但是你可能对此感兴趣:

http://code.activestate.com/recipes/442447/

它允许使用生成器expression式来查询SQL数据库。

我认为应该在这里提到小马ORM 。 对我来说,这 LINQ:

q = select((p.name, p.price) for p in Product) q2 = q.filter(lambda n, p: n.name.startswith(“A”) and p > 100) 

或直接从他们的登陆页面:

 select(c for c in Customer if sum(c.orders.price) > 1000) 

只是为了好玩,我创build了下面的代码。

 """This module provides linq-like extensions for some common data structures""" import __builtin__ class extlist(list): """subclass of list""" def where(self, condition): return extlist(filter(condition, self)) def aggregate(self, condition): return extlist(reduce(condition, self)) def select(self, condition=lambda x: x): return extlist(map(condition, self)) __builtin__.list = extlist class extstr(str): """subclass of str""" def where(self, condition): return extstr(filter(condition, self)) def aggregate(self, condition): return extstr(reduce(condition, self)) def select(self, condition=lambda x: x): return extstr(map(condition, self)) __builtin__.str = extstr 

用法

 a = list('apple') a.where(lambda u: u == 'p').select(lambda x: x.upper()) 

['P','P']

你可能想看看kalamar: http ://dyko.org/api/kalamar.html

它是一个统一的数据访问库,使用与linq相似的语法来访问异构后端(文件,sql,…)上以不同格式(xml,mp3,…)存储的数据。

我们启动PythonQL,这基本上是类固醇上的Python的LINQ(也许维生素)。 它是对Python语法的扩展,但是(drumrolls)你可以通过pip来安装它,并且不会破坏任何现有的代码:)检查一下: http://www.pythonql.org