需要有关如何从dynamodb检索结果并迭代结果的帮助
{
"Count": 1,
"Items": [
{ "userID" :100,
"userVisits": [
{
"Accomapnied_relation": "Accomapnied Test relation",
"Accompanied_By": "Accompanied by test",
"Additional_Notes": "Additional notes Test",
"Advance_Directive": "Advance_Directive for visit id 123",
"Chief_Complaints": "Test Chief_Complaints for Visit Id 123",
"Condition_at_discharge": "Test Condition_at_discharge",
"Course_in_the_hospital": [
{
"Dose": "test Dose",
"Drug": "Test Drug",
"Duration": "3months",
"Given_DTTM": "Givend DTTM",
"Schedule": "Schedule Test"
}
],
"mode_of_admission": "Test Attempt",
"userVisitId": "135"
},
{
"Accomapnied_relation": "Accomapnied Test relation",
"Accompanied_By": "Accompanied by test",
"Additional_Notes": "Additional notes Test",
"Advance_Directive": "Advance_Directive for visit id 123",
"Chief_Complaints": "Test Chief_Complaints for Visit Id 123",
"Condition_at_discharge": "Test Condition_at_discharge",
"Course_in_the_hospital": [
{
"Dose": "test Dose",
"Drug": "Test Drug",
"Duration": "3months",
"Given_DTTM": "Givend DTTM",
"Schedule": "Schedule Test"
}
],
"mode_of_admission": "Suicide Attempt",
"userVisitId": "134"
}
]
}
],
}
我想编写一个API来获取上述dynamodb的结果,API GET:/ api / users // visits /
以下是我在烧瓶中写的代码
@app.route("/api/users/<userID>/visits/<visitID>")
def getUserVisits(userID,visitID):
userID = int(userID)
visitId = str(visitId)
result = table.query(
ProjectionExpression="#userID, userVisits",
ExpressionAttributeNames={ "#userID": "userID" }, # Expression Attribute Names for Projection Expression only.
KeyConditionExpression=Key('userID').eq(userID)
)
if not result['Items']:
raise InvalidUsage('No User Visits Details found with User :{} and visit Id :{} '.format(userID, visitID), status_code=410)
for item in result['Items']:
if not item:
raise InvalidUsage('No USer Visits Details found with User :{} and visit Id :{} '.format(userID, visitID), status_code=410)
for visits in item['userVisits']:
if(visitId == visits['visitId']):
return jsonify(visits), 200
if not visits:
raise InvalidUsage('No User Visits Details found with User :{} and visit Id :{} '.format(userID, visitID), status_code=410)
raise InvalidUsage('No User Visits Details found with User :{} and visit Id :{} '.format(userID, visitID), status_code=410)
以上工作正常,但花了很多时间,在dynamoDB中是否有任何功能获取userID和visitID的userVisits,我们可以改进上面的代码,我是Flask和DynamoDb的新手,你能帮我解决这个问题吗?改进代码任何最好的parctices。
非常感谢!!
首先,你提到它需要花费很多时间而不提多久(以msecs为单位)。访问API中只有两个操作。
1)Dynamodb查询获取项目。当您通过分区键查询表时,Dynamodb Query API
不应该花费更多时间
2)遍历数组以通过userVisitId查找userVisits。通常,此迭代不应为中型阵列腾出更多时间。此外,Dynamodb项目大小最多只能为400 KB。所以,我认为迭代不应该花费更多时间。
不过,如果您认为上述解决方案需要更多时间。我建议为上述数据模型提供替代解决方案。
请使用下表定义重构数据模型。这样您就可以使用KeyConditionExpression
中的分区和范围键直接查询表。
分区键:userID
范围键:userVisitId
替代解决方案将消除迭代步骤以匹配userVisitId
。