【问题标题】:In SQLAlchemy, any performance difference between .first() and [0]?在 SQLAlchemy 中,.first() 和 [0] 之间有什么性能差异?
【发布时间】:2012-05-14 22:14:09
【问题描述】:

有什么区别

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

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

?

【问题讨论】:

  • 何不试试看?
  • 尝试了几个案例,没有发现任何显着差异,但我是 SQLAlchemy 的新手,对 Python 来说相对较新。认为有人可能知道一些边缘情况或一般智慧(沿着避免使用 eval 的路线......)。

标签: python python-3.x sqlalchemy slice


【解决方案1】:

显然,使用__gettitem__first 之间没有太大区别

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

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

【讨论】:

  • 显然...但是你能提供任何证据吗?
  • 我已经链接到相关的源段落。你还需要什么证明?以防万一我在我的答案中添加了一个简短的解释。
【解决方案2】:

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

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

【讨论】:

  • 美丽。我还没有注意到 Query.get 方法。如果对象已经在内存中,它会更快。
猜你喜欢
  • 1970-01-01
  • 2010-10-25
  • 1970-01-01
  • 2020-06-15
  • 2011-02-04
  • 1970-01-01
  • 2015-02-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多