我需要检查find语句是否返回非空查询.
我在做的是以下内容:
query = collection.find({"string": field})
if not query: #do something
Run Code Online (Sandbox Code Playgroud)
然后我意识到我的if语句从未执行过因为find返回游标,或者查询是否为空.
因此我检查了文档,找到了两种可以帮助我的方法:
count(with_limit_and_skip=False) 其中(来自说明):
返回此查询的结果集中的文档数.
这似乎是一个很好的检查方法,但这意味着我需要计算光标中的所有结果,以确定它是否为零,对吧?有点贵吗?
retrieved 其中(来自说明):
到目前为止检索的文件数量.
我在一个空的查询集上测试它并返回零,但它不清楚它做了什么,我不知道它是否适合我.
那么,检查查询是否find()返回空集的最佳方法(最佳实践)是什么?上面描述的方法之一是否适用于此目的?性能怎么样?还有其他方法吗?
需要明确的是:我需要知道查询是否为空,我想找到关于性能和pythonic的光标的最佳方法.
我正在研究Scala项目,我需要将OffsetDateTime类型映射到SQL Timestamp类型.在DB中我想要UTC时间.
从转换OffsetDateTime到Timestamp非常简单(提示来自这个问题),它按预期工作:
import java.time._
import java.sql.Timestamp
val ofsdatetime = OffsetDateTime.now()
// ofsdatetime: java.time.OffsetDateTime = 2017-04-04T21:46:33.567+02:00
val tstamp = Timestamp.valueOf(ofsdatetime.atZoneSameInstant(ZoneOffset.UTC).toLocalDateTime())
// tstamp: java.sql.Timestamp = 2017-04-04 19:46:33.567
Run Code Online (Sandbox Code Playgroud)
如您所见,时区被删除,时间戳是两个小时的时间(UTC),太棒了!
转换回Timestamp至OffsetDateTime 不能按预期工作:
OffsetDateTime.ofInstant(Instant.ofEpochMilli(tstamp.getTime), ZoneId.systemDefault())
// java.time.OffsetDateTime = 2017-04-04T19:46:33.567+02:00
Run Code Online (Sandbox Code Playgroud)
时区已添加到新创建的OffsetDateTime,但时间不正确(它仍然是UTC,我需要它适应实际时区).
为什么?我究竟做错了什么?