当前位置:  开发笔记 > 编程语言 > 正文

你能用Python或Boo这样的语言进行类似LINQ的查询吗?

如何解决《你能用Python或Boo这样的语言进行类似LINQ的查询吗?》经验,为你挑选了3个好方法。

采用这个简单的C#LINQ查询,并想象这db.Numbers是一个包含一列的SQLNumber:

var result = 
    from n in db.Numbers
        where n.Number < 5
        select n.Number;

这将在C#中非常有效地运行,因为它会生成类似的SQL查询

select Number from Numbers where Number < 5 

没有做的是从数据库中选择所有数字,然后在C#中过滤它们,因为它可能在最初时看起来像.

Python支持类似的语法:

result = [n.Number for n in Numbers if n.Number < 5]

但是这里的if子句在客户端而不是服务器端进行过滤,效率低得多.

Python中有没有像LINQ一样高效的东西?(我目前正在评估PythonIronPythonBoo的比较,因此可以使用任何一种语言的答案都可以.)



1> David Raznic..:

sqlalchemy中的sqlsoup为您提供了python中最快的解决方案我想如果你想要一个明确的(ish)单线程.看看页面看看.

它应该像......

result = [n.Number for n in db.Numbers.filter(db.Numbers.Number < 5).all()]



2> S.Lott..:

仔细看看SQLAlchemy.这可能会做你想要的很多事情.它为您提供了在服务器上运行的普通SQL的Python语法.



3> Chris Ammerm..:

LINQ是C#和VB.NET的语言特性.它是编译器认可并经过特殊处理的特殊语法.它还依赖于另一种称为表达式树的语言特性.

表达式树有点不同,因为它们不是特殊的语法.它们的编写方式与任何其他类实例化一样,但编译器通过将lambda转换为运行时抽象语法树的实例化,确实将它们专门用于处理它们.这些可以在运行时进行操作,以使用另一种语言(即SQL)生成命令.

C#和VB.NET编译器采用LINQ语法,并将其转换为lambdas,然后将它们传递给表达式树实例化.然后有一堆框架类操纵这些树来生成SQL.您还可以找到提供"LINQ提供程序"的其他库,包括MS生产的和第三方的库,这些库基本上会弹出不同的AST处理器,以生成LINQ以外的SQL.

因此,用另一种语言执行这些操作的一个障碍是它们是否支持运行时AST构建/操作的问题.我不知道是否有任何Python或Boo的实现,但我没有听说过任何这样的功能.

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有