在Python或Boo中可以做类似LINQ的查询吗?

5 投票
6 回答
7562 浏览
提问于 2025-04-11 09:26

假设你有一个简单的 C# LINQ 查询,想象一下 db.Numbers 是一个 SQL 表格,里面只有一列叫 Number

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,所以任何一种语言都能用的答案都可以。)

相关问题:

6 个回答

5

仔细看看 SQLAlchemy。这个工具可能能满足你大部分的需求。它让你可以用Python的语法来写普通的SQL,而这些SQL代码是在服务器上运行的。

7

在sqlalchemy中,sqlsoup 是我认为在Python中能给你最快解决方案的工具,如果你想要一个比较简单的一行代码。你可以去看看那个页面。

它应该是类似这样的...

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

我相信,当IronPython 2.0完成时,它会支持LINQ(你可以查看这个讨论串,里面有一些示例讨论)。现在,你应该能够写出类似下面的代码:

Queryable.Select(Queryable.Where(someInputSequence, somePredicate), someFuncThatReturnsTheSequenceElement) 

可能在IronPython 2.0b4版本中会有更好的东西加入——现在有很多关于命名冲突处理的讨论。

撰写回答