select()和table.select()之间的差异

时间:2012-12-02 20:58:39

标签: python sqlalchemy

selecttablename.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

我希望selecttable.select的结果相同。

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

1 个答案:

答案 0 :(得分:4)

据推测,select()代表sqlalchemy.sql.select()

select()函数明确地将一组列作为其参数,并且它的结果是独立的Select instance。这在核心教程的Selecting chapter中有详细描述。

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

换句话说,正确使用table.select()函数是传递选择过滤器,以及选择所有列的意图:

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

将编译为:

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

(尽管在SQLAlchemy 0.8中,至少将*扩展为所有table列名的明确列表。)

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