带有时间戳的扳手读取失败
spanner read with timestamp fails
我正在尝试使用下面的代码从 google Spanner table 读取带有时间戳的内容。
import datetime as dt
from google.cloud.spanner.client import Client
proj = 'my_project'
inst = 'my_instance'
db = 'my_database'
datetime_now = dt.datetime.now()
with Client(proj).instance(inst).database(db).snapshot(read_timestamp=datetime_now) as snapshot: # this fails
#with Client(proj).instance(inst).database(db).snapshot() as snapshot: # this works
result = snapshot.execute_sql('some SQL query')
for row in result:
print row
如果我在 "snapshot" 调用中设置时间戳,这 returns 下面的错误消息:
grpc._channel._Rendezvous: <_Rendezvous of RPC that terminated with (StatusCode.DEADLINE_EXCEEDED, Deadline Exceeded)>
而如果我只是调用“[...].snapshot()”,则 table 会被正确读取。
这是我的脚本错误还是安装问题?
编辑:刚注意到我没有使用最新版本的 python 扳手 API。从 0.26 更新到 0.28 后,发生了同样的事情,除了脚本会永远运行而不返回任何东西,而不是引发错误。
经过一些研究,解决方案(以防其他人 运行 遇到类似问题):
datetime_now = dt.datetime.now()
(当运行本地时)returns当前系统时间。如果这是与数据库时间 (UTC) 相比的未来时间,则读取失败或挂起。使用
datetime_now = dt.datetime.utcnow()
解决了这个问题,但如果脚本在云端执行,则可能不需要这样做。
我正在尝试使用下面的代码从 google Spanner table 读取带有时间戳的内容。
import datetime as dt
from google.cloud.spanner.client import Client
proj = 'my_project'
inst = 'my_instance'
db = 'my_database'
datetime_now = dt.datetime.now()
with Client(proj).instance(inst).database(db).snapshot(read_timestamp=datetime_now) as snapshot: # this fails
#with Client(proj).instance(inst).database(db).snapshot() as snapshot: # this works
result = snapshot.execute_sql('some SQL query')
for row in result:
print row
如果我在 "snapshot" 调用中设置时间戳,这 returns 下面的错误消息:
grpc._channel._Rendezvous: <_Rendezvous of RPC that terminated with (StatusCode.DEADLINE_EXCEEDED, Deadline Exceeded)>
而如果我只是调用“[...].snapshot()”,则 table 会被正确读取。
这是我的脚本错误还是安装问题?
编辑:刚注意到我没有使用最新版本的 python 扳手 API。从 0.26 更新到 0.28 后,发生了同样的事情,除了脚本会永远运行而不返回任何东西,而不是引发错误。
经过一些研究,解决方案(以防其他人 运行 遇到类似问题):
datetime_now = dt.datetime.now()
(当运行本地时)returns当前系统时间。如果这是与数据库时间 (UTC) 相比的未来时间,则读取失败或挂起。使用
datetime_now = dt.datetime.utcnow()
解决了这个问题,但如果脚本在云端执行,则可能不需要这样做。