5

select和 和有什么区别tablename.select()?当我将列名传递给table.select喜欢时:

table.select(table.c.name)

sql就像

select * from tablename where tablename.name

当我将一列传递给select(实例方法)时:

select([table.c.name])

sql就像

select name from tablename

我想要与 相同的select结果table.select

当我阅读它的文档时,select它是相同的,所以它是相同的方法,但为什么它们有不同的行为?

4

1 回答 1

7

大概,select()你的意思是sqlalchemy.sql.select()

select()函数明确地将一组列作为它的参数,它的结果是一个独立的Select实例。您还可以传入一个FromClause对象(如表或别名),它将从该对象中获取列。这在核心教程的选择章节中有详细描述。

另一方面,.select()表上的方法采用whereclause第一个参数,而不是一组列。换句话说,无论您传递给方法,形成WHERE选择的过滤器,而不是您想要选择的列。通过为 where 子句传入一列,您将选择所有列,但过滤WHERE [columnname]. 过滤器不多,因为表达式并没有真正限制匹配的行。

正确使用该table.select()函数是传入一个选择过滤器,并打算选择所有列:

table.select(table.c.name != None)

这将被编译为:

SELECT * FROM tablename WHERE tablename.name IS NOT NULL;

(虽然 SQLAlchemy 知道存在哪些列,但会扩展*为所有table列名的显式列表)。

您应该坚持select()仅选择特定列的功能。

于 2012-12-02T21:18:07.777 回答