【发布时间】:2019-03-30 00:46:22
【问题描述】:
我有一个带有 boto3 框架的 DynamoDB 查询,它适用于运行 Python 3.6 的本地计算机,但不适用于运行 Python 2.7 的服务器。
我本地机器上的工作代码:
dyndb = boto3.resource('dynamodb')
table = dyndb.Table('XXXXXXX')
response = table.query(
IndexName = "XXX-XXX-index",
ProjectionExpression = "AssessID,SNo,Details,Status,OTP",
KeyConditionExpression = Key('OTP').eq(otp))
服务器上运行的代码...
global user_otp
dyndb = boto3.resource('dynamodb')
table = dyndb.Table('XXXXXX')
otp = int(user_otp)
print("converting string otp to int otp") # it is printed on console
response = table.query(
IndexName = "XXX-XXX-index",
ProjectionExpression = "AssessID,SNo,Details,Status,OTP",
KeyConditionExpression = Key('OTP').eq(otp) & Key('SNo').between(1,5))
print ("response code is executing file") # it is not printed on console
当我打印输出时,会显示第一次打印,但不会在表查询之后显示第二次打印。
我正在使用OTP 作为分区键和SNo 作为排序键对全局索引进行此查询。我在本地机器上只使用分区键得到结果,但在我的服务器上却没有,即使同时使用分区键和排序键。
DynamoDB 不会引发任何异常。相反,我得到了龙卷风 websocket 异常。
control coming to process and response function
user otp mentioned is 3086and its type <type 'int'>
converting string otp to int otp
ERROR:tornado.application:Exception in callback <functools.partial object at 0x7f33b6ce7890>
Traceback (most recent call last):
File "/usr/lib64/python2.7/site-packages/tornado/ioloop.py", line 758, in _run_callback
ret = callback()
File "/usr/lib64/python2.7/site-packages/tornado/stack_context.py", line 300, in null_wrapper
return fn(*args, **kwargs)
File "/usr/lib64/python2.7/site-packages/tornado/ioloop.py", line 779, in _discard_future_result
future.result()
File "/usr/lib64/python2.7/site-packages/tornado/concurrent.py", line 261, in result
raise_exc_info(self._exc_info)
File "/usr/lib64/python2.7/site-packages/tornado/gen.py", line 1141, in run
yielded = self.gen.throw(*exc_info)
File "/usr/lib64/python2.7/site-packages/tornado/websocket.py", line 888, in _receive_frame_loop
yield self._receive_frame()
File "/usr/lib64/python2.7/site-packages/tornado/gen.py", line 1133, in run
value = future.result()
File "/usr/lib64/python2.7/site-packages/tornado/concurrent.py", line 261, in result
raise_exc_info(self._exc_info)
File "/usr/lib64/python2.7/site-packages/tornado/gen.py", line 1147, in run
yielded = self.gen.send(value)
File "/usr/lib64/python2.7/site-packages/tornado/websocket.py", line 975, in _receive_frame
handled_future = self._handle_message(opcode, data)
File "/usr/lib64/python2.7/site-packages/tornado/websocket.py", line 1000, in _handle_message
return self._run_callback(self.handler.on_message, decoded)
File "/usr/lib64/python2.7/site-packages/tornado/websocket.py", line 548, in _run_callback
self.handler.log_exception(*sys.exc_info())
AttributeError: 'WebSocketClientConnection' object has no attribute 'log_exception'
【问题讨论】:
-
我使用 python 2.7 从同一服务器运行了相同的 dynadmodb 代码。它正在获取记录。所以它不是 dynamodb 查询的问题。从 websocket 端挖掘更多......我是 websockets 的新手。但我会一直在这里发布。注意:我只运行了 dynamodb 查询作为单独的 python 文件进行测试。
标签: python-3.x python-2.7 websocket amazon-dynamodb tornado