之间的任何区别
a = session.query(Accounts).filter(Accounts.key = 4).first()
和
a = session.query(Accounts).filter(Accounts.key = 4)[0]
?
之间的任何区别
a = session.query(Accounts).filter(Accounts.key = 4).first()
和
a = session.query(Accounts).filter(Accounts.key = 4)[0]
?
__gettitem__显然,使用或之间没有太大区别first
提示:上述两个调用基本上返回相同:
query = session.query(Accounts).filter(Accounts.key = 4)
a = list(query[0:1])[0]
正如@mata 指出并指向源代码的那样,两者的执行路径没有区别。其实你也可以echo=True在创建引擎的时候通过设置开启SQL日志,你会看到两条SQL语句是完全一样的(某种SELECT ... FROM ... WHERE ....id = ? LIMIT ? OFFSET ?)
但是,如果Accounts.key实际上是主键,那么通过主键获取持久实例的最佳方法是使用该Query.get方法,该方法将生成SELECT ... FROM ... WHERE ....id = ?并且应该足够好。我认为它不会更快,但更清洁。