0

之间的任何区别

a = session.query(Accounts).filter(Accounts.key = 4).first()

a = session.query(Accounts).filter(Accounts.key = 4)[0]

?

4

2 回答 2

4

__gettitem__显然,使用或之间没有太大区别first

提示:上述两个调用基本上返回相同:

query = session.query(Accounts).filter(Accounts.key = 4)
a = list(query[0:1])[0]
于 2012-05-05T19:32:40.017 回答
1

正如@mata 指出并指向源代码的那样,两者的执行路径没有区别。其实你也可以echo=True在创建引擎的时候通过设置开启SQL日志,你会看到两条SQL语句是完全一样的(某种SELECT ... FROM ... WHERE ....id = ? LIMIT ? OFFSET ?

但是,如果Accounts.key实际上是主键,那么通过主键获取持久实例的最佳方法是使用该Query.get方法,该方法将生成SELECT ... FROM ... WHERE ....id = ?并且应该足够好。我认为它不会更快,但更清洁。

于 2012-05-07T07:13:23.533 回答