예제 #1
0
def main() -> None:
    table = boto3.resource("dynamodb").Table("test_dq_users_table")
    user_records = [
        {
            "pk": "*****@*****.**",
            "sk": "IBM",
            "email": "*****@*****.**",
            "company": "IBM",
            "name": "John",
            "age": 34,
        },
        {
            "pk": "*****@*****.**",
            "sk": "CiscoSystems",
            "email": "*****@*****.**",
            "company": "CiscoSystems",
            "name": "Mary",
            "age": 34,
        },
    ]
    DynamoQuery.build_batch_update_item().table(
        table, table_keys={"pk", "sk"}).execute(user_records)

    print("Get all records:")
    for record in DynamoQuery.build_scan().table(table,
                                                 table_keys={"pk", "sk"
                                                             }).execute_dict():
        print(record)

    print("Get John's record:")
    for record in (DynamoQuery.build_get_item().table(
            table, table_keys={"pk", "sk"}).execute_dict({
                "pk": "*****@*****.**",
                "sk": "IBM"
            })):
        print(record)

    print("Query by a specific index:")
    for record in (DynamoQuery.build_query(
            index_name="gsi_name_age",
            key_condition_expression=ConditionExpression("name")).table(
                table, table_keys={"pk", "sk"}).execute_dict({
                    "name": "Mary",
                    "age": 34
                })):
        print(record)
 def test_scan() -> None:
     table_resource_mock = MagicMock()
     query = (DynamoQuery.build_scan(
         filter_expression=ConditionExpression("test"),
         projection_expression=ProjectionExpression("test2"),
         limit=100,
     ).table(table=table_resource_mock,
             table_keys=("pk", "sk")).projection("test"))
     result = query.execute_dict({"test": "value"})
     table_resource_mock.scan.assert_called_with(
         ExpressionAttributeNames={"#aaa": "test"},
         ExpressionAttributeValues={":aaa": "value"},
         FilterExpression="#aaa = :aaa",
         Limit=100,
         ProjectionExpression="#aaa",
     )
     assert list(result.get_records()) == []