DynamoDB Flask API:检索特定项目的结果并迭代项目

问题描述 投票:0回答:1

需要有关如何从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。

非常感谢!!

python-3.x amazon-web-services flask aws-lambda amazon-dynamodb
1个回答
0
投票

首先,你提到它需要花费很多时间而不提多久(以msecs为单位)。访问API中只有两个操作。

1)Dynamodb查询获取项目。当您通过分区键查询表时,Dynamodb Query API不应该花费更多时间

2)遍历数组以通过userVisitId查找userVisits。通常,此迭代不应为中型阵列腾出更多时间。此外,Dynamodb项目大小最多只能为400 KB。所以,我认为迭代不应该花费更多时间。

不过,如果您认为上述解决方案需要更多时间。我建议为上述数据模型提供替代解决方案。

请使用下表定义重构数据模型。这样您就可以使用KeyConditionExpression中的分区和范围键直接查询表。

分区键:userID

范围键:userVisitId

替代解决方案将消除迭代步骤以匹配userVisitId

© www.soinside.com 2019 - 2024. All rights reserved.