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
的文档时,它是相同的,所以它是相同的方法,但为什么他们有不同的行为?
答案 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()
功能来仅选择特定列。