在SQLAlchemy中,.first()和[0]之间的性能差异是什么?

时间:2012-05-05 18:05:25

标签: python python-3.x sqlalchemy slice

之间有任何区别
a = session.query(Accounts).filter(Accounts.key = 4).first()

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

2 个答案:

答案 0 :(得分:4)

显然,使用__gettitem__first

之间没有太大区别

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

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

答案 1 :(得分:1)

正如@mata指出并指向源代码,两者的执行路径没有区别。实际上,您还可以在创建引擎时通过设置echo=True来启用SQL日志记录,并且您将看到两个SQL语句完全相同(某种SELECT ... FROM ... WHERE ....id = ? LIMIT ? OFFSET ?

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