之间的任何区别
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 = ?
并且应该足够好。我认为它不会更快,但更清洁。