Confronta più valori con un singolo attributo in DynamoDB con un SDK AWS - AWS Esempi di codice SDK

Sono disponibili altri esempi AWS SDK nel repository AWS Doc SDK Examples. GitHub

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Confronta più valori con un singolo attributo in DynamoDB con un SDK AWS

I seguenti esempi di codice mostrano come confrontare più valori con un singolo attributo in DynamoDB.

  • Utilizzate l'operatore IN per confrontare più valori con un singolo attributo.

  • Confronta l'operatore IN con più condizioni OR.

  • Comprendi i vantaggi in termini di prestazioni e complessità di espressione derivanti dall'utilizzo di IN.

Java
SDK per Java 2.x

Confronta più valori con un singolo attributo in DynamoDB utilizzando. AWS SDK for Java 2.x

import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.dynamodb.model.AttributeValue; import software.amazon.awssdk.services.dynamodb.model.DynamoDbException; import software.amazon.awssdk.services.dynamodb.model.QueryRequest; import software.amazon.awssdk.services.dynamodb.model.QueryResponse; import software.amazon.awssdk.services.dynamodb.model.ScanRequest; import software.amazon.awssdk.services.dynamodb.model.ScanResponse; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; /** * Queries a table using the IN operator to compare multiple values with a single attribute. * * <p>This method demonstrates how to use the IN operator in a filter expression * to match an attribute against multiple values. * * @param dynamoDbClient The DynamoDB client * @param tableName The name of the DynamoDB table * @param partitionKeyName The name of the partition key attribute * @param partitionKeyValue The value of the partition key to query * @param attributeName The name of the attribute to compare * @param valuesList List of values to compare against * @return The query response from DynamoDB * @throws DynamoDbException if an error occurs during the operation */ public static QueryResponse compareMultipleValues( DynamoDbClient dynamoDbClient, String tableName, String partitionKeyName, AttributeValue partitionKeyValue, String attributeName, List<AttributeValue> valuesList) { // Create expression attribute names Map<String, String> expressionAttributeNames = new HashMap<>(); expressionAttributeNames.put("#pkName", partitionKeyName); expressionAttributeNames.put("#attrName", attributeName); // Create expression attribute values Map<String, AttributeValue> expressionAttributeValues = new HashMap<>(); expressionAttributeValues.put(":pkValue", partitionKeyValue); // Add values for IN operator for (int i = 0; i < valuesList.size(); i++) { expressionAttributeValues.put(":val" + i, valuesList.get(i)); } // Build the IN clause StringBuilder inClause = new StringBuilder(); for (int i = 0; i < valuesList.size(); i++) { if (i > 0) { inClause.append(", "); } inClause.append(":val").append(i); } // Define the query parameters QueryRequest request = QueryRequest.builder() .tableName(tableName) .keyConditionExpression("#pkName = :pkValue") .filterExpression("#attrName IN (" + inClause.toString() + ")") .expressionAttributeNames(expressionAttributeNames) .expressionAttributeValues(expressionAttributeValues) .build(); // Perform the query operation return dynamoDbClient.query(request); } /** * Queries a table using multiple OR conditions to compare multiple values with a single attribute. * * <p>This method demonstrates the alternative approach to using the IN operator, * by using multiple OR conditions. * * @param dynamoDbClient The DynamoDB client * @param tableName The name of the DynamoDB table * @param partitionKeyName The name of the partition key attribute * @param partitionKeyValue The value of the partition key to query * @param attributeName The name of the attribute to compare * @param valuesList List of values to compare against * @return The query response from DynamoDB * @throws DynamoDbException if an error occurs during the operation */ public static QueryResponse compareWithOrConditions( DynamoDbClient dynamoDbClient, String tableName, String partitionKeyName, AttributeValue partitionKeyValue, String attributeName, List<AttributeValue> valuesList) { // Create expression attribute names Map<String, String> expressionAttributeNames = new HashMap<>(); expressionAttributeNames.put("#pkName", partitionKeyName); expressionAttributeNames.put("#attrName", attributeName); // Create expression attribute values Map<String, AttributeValue> expressionAttributeValues = new HashMap<>(); expressionAttributeValues.put(":pkValue", partitionKeyValue); // Add values for OR conditions for (int i = 0; i < valuesList.size(); i++) { expressionAttributeValues.put(":val" + i, valuesList.get(i)); } // Build the OR conditions StringBuilder orConditions = new StringBuilder(); for (int i = 0; i < valuesList.size(); i++) { if (i > 0) { orConditions.append(" OR "); } orConditions.append("#attrName = :val").append(i); } // Define the query parameters QueryRequest request = QueryRequest.builder() .tableName(tableName) .keyConditionExpression("#pkName = :pkValue") .filterExpression(orConditions.toString()) .expressionAttributeNames(expressionAttributeNames) .expressionAttributeValues(expressionAttributeValues) .build(); // Perform the query operation return dynamoDbClient.query(request); } /** * Compares the performance of using the IN operator versus multiple OR conditions. * * <p>This method demonstrates the performance difference between using the IN operator * and using multiple OR conditions. * * @param dynamoDbClient The DynamoDB client * @param tableName The name of the DynamoDB table * @param partitionKeyName The name of the partition key attribute * @param partitionKeyValue The value of the partition key to query * @param attributeName The name of the attribute to compare * @param valuesList List of values to compare against * @return Map containing the performance comparison results */ public static Map<String, Object> comparePerformance( DynamoDbClient dynamoDbClient, String tableName, String partitionKeyName, AttributeValue partitionKeyValue, String attributeName, List<AttributeValue> valuesList) { Map<String, Object> results = new HashMap<>(); try { // Measure performance of IN operator long inStartTime = System.nanoTime(); QueryResponse inResponse = compareMultipleValues( dynamoDbClient, tableName, partitionKeyName, partitionKeyValue, attributeName, valuesList); long inEndTime = System.nanoTime(); long inDuration = inEndTime - inStartTime; // Measure performance of OR conditions long orStartTime = System.nanoTime(); QueryResponse orResponse = compareWithOrConditions( dynamoDbClient, tableName, partitionKeyName, partitionKeyValue, attributeName, valuesList); long orEndTime = System.nanoTime(); long orDuration = orEndTime - orStartTime; // Record results results.put("inOperatorDuration", inDuration); results.put("orConditionsDuration", orDuration); results.put("inOperatorItems", inResponse.count()); results.put("orConditionsItems", orResponse.count()); results.put("inOperatorExpression", "IN operator with " + valuesList.size() + " values"); results.put("orConditionsExpression", valuesList.size() + " OR conditions"); results.put("success", true); } catch (DynamoDbException e) { results.put("success", false); results.put("error", e.getMessage()); } return results; } /** * Scans a table using the IN operator with a large number of values. * * <p>This method demonstrates how to use the IN operator with a large number of values, * which can help stay within the 300 operator limit. * * @param dynamoDbClient The DynamoDB client * @param tableName The name of the DynamoDB table * @param attributeName The name of the attribute to compare * @param valuesList List of values to compare against * @return The scan response from DynamoDB * @throws DynamoDbException if an error occurs during the operation */ public static ScanResponse scanWithLargeInClause( DynamoDbClient dynamoDbClient, String tableName, String attributeName, List<AttributeValue> valuesList) { // Create expression attribute names Map<String, String> expressionAttributeNames = new HashMap<>(); expressionAttributeNames.put("#attrName", attributeName); // Create expression attribute values Map<String, AttributeValue> expressionAttributeValues = new HashMap<>(); // Add values for IN operator for (int i = 0; i < valuesList.size(); i++) { expressionAttributeValues.put(":val" + i, valuesList.get(i)); } // Build the IN clause StringBuilder inClause = new StringBuilder(); for (int i = 0; i < valuesList.size(); i++) { if (i > 0) { inClause.append(", "); } inClause.append(":val").append(i); } // Define the scan parameters ScanRequest request = ScanRequest.builder() .tableName(tableName) .filterExpression("#attrName IN (" + inClause.toString() + ")") .expressionAttributeNames(expressionAttributeNames) .expressionAttributeValues(expressionAttributeValues) .build(); // Perform the scan operation return dynamoDbClient.scan(request); } /** * Generates a list of sample values for testing. * * <p>Helper method to generate a list of sample values for testing. * * @param valueType The type of values to generate (string, number, or boolean) * @param count The number of values to generate * @return List of generated attribute values */ public static List<AttributeValue> generateSampleValues(String valueType, int count) { List<AttributeValue> values = new ArrayList<>(); for (int i = 0; i < count; i++) { AttributeValue value; switch (valueType.toLowerCase(Locale.ROOT)) { case "string": value = AttributeValue.builder().s("Value" + i).build(); break; case "number": value = AttributeValue.builder().n(String.valueOf(i)).build(); break; case "boolean": value = AttributeValue.builder().bool(i % 2 == 0).build(); break; default: throw new IllegalArgumentException("Unsupported value type: " + valueType); } values.add(value); } return values; }

Esempio di utilizzo del confronto di più valori con. AWS SDK for Java 2.x

public static void exampleUsage(DynamoDbClient dynamoDbClient, String tableName) { System.out.println("Demonstrating how to compare multiple values with a single attribute in DynamoDB"); try { // Example 1: Using the IN operator System.out.println("\nExample 1: Using the IN operator"); List<AttributeValue> categories = List.of( AttributeValue.builder().s("Electronics").build(), AttributeValue.builder().s("Computers").build(), AttributeValue.builder().s("Accessories").build()); QueryResponse inResponse = compareMultipleValues( dynamoDbClient, tableName, "Department", AttributeValue.builder().s("Retail").build(), "Category", categories); System.out.println("Found " + inResponse.count() + " items using IN operator"); System.out.println("Items: " + inResponse.items()); // Example 2: Using multiple OR conditions System.out.println("\nExample 2: Using multiple OR conditions"); QueryResponse orResponse = compareWithOrConditions( dynamoDbClient, tableName, "Department", AttributeValue.builder().s("Retail").build(), "Category", categories); System.out.println("Found " + orResponse.count() + " items using OR conditions"); System.out.println("Items: " + orResponse.items()); // Example 3: Performance comparison System.out.println("\nExample 3: Performance comparison"); Map<String, Object> perfComparison = comparePerformance( dynamoDbClient, tableName, "Department", AttributeValue.builder().s("Retail").build(), "Category", categories); if ((boolean) perfComparison.get("success")) { System.out.println("IN operator duration: " + perfComparison.get("inOperatorDuration") + " ns"); System.out.println("OR conditions duration: " + perfComparison.get("orConditionsDuration") + " ns"); System.out.println("IN operator found " + perfComparison.get("inOperatorItems") + " items"); System.out.println("OR conditions found " + perfComparison.get("orConditionsItems") + " items"); System.out.println("Expression complexity comparison:"); System.out.println(" IN operator: " + perfComparison.get("inOperatorExpression")); System.out.println(" OR conditions: " + perfComparison.get("orConditionsExpression")); } else { System.out.println("Performance comparison failed: " + perfComparison.get("error")); } // Example 4: Using IN with a large number of values System.out.println("\nExample 4: Using IN with a large number of values"); List<AttributeValue> productIds = generateSampleValues("string", 20); ScanResponse largeInResponse = scanWithLargeInClause(dynamoDbClient, tableName, "ProductId", productIds); System.out.println( "Found " + largeInResponse.count() + " items using IN with " + productIds.size() + " values"); // Explain the benefits of using IN System.out.println("\nKey points about using the IN operator in DynamoDB:"); System.out.println("1. The IN operator allows comparing a single attribute against multiple values"); System.out.println("2. IN is more concise than using multiple OR conditions"); System.out.println("3. IN counts as only 1 operator regardless of the number of values"); System.out.println("4. Multiple OR conditions count as 1 operator per condition plus 1 per OR"); System.out.println("5. Using IN helps stay within the 300 operator limit for complex expressions"); System.out.println("6. IN can be used in filter expressions and condition expressions"); System.out.println("7. The IN operator supports up to 100 comparison values"); } catch (DynamoDbException e) { System.err.println("Error: " + e.getMessage()); e.printStackTrace(); } }
  • Per informazioni dettagliate sull'API, consulta i seguenti argomenti nella Documentazione di riferimento delle API AWS SDK for Java 2.x .

JavaScript
SDK per JavaScript (v3)

Confronta più valori con un singolo attributo utilizzando. AWS SDK per JavaScript

const { DynamoDBClient } = require("@aws-sdk/client-dynamodb"); const { DynamoDBDocumentClient, ScanCommand, QueryCommand } = require("@aws-sdk/lib-dynamodb"); /** * Query or scan a DynamoDB table to find items where an attribute matches any value from a list. * * This function demonstrates the use of the IN operator to compare a single attribute * against multiple possible values, which is more efficient than using multiple OR conditions. * * @param {Object} config - AWS configuration object * @param {string} tableName - The name of the DynamoDB table * @param {string} attributeName - The name of the attribute to compare against the values list * @param {Array} valuesList - List of values to compare the attribute against * @param {string} [partitionKeyName] - Optional name of the partition key attribute for query operations * @param {string} [partitionKeyValue] - Optional value of the partition key to query * @returns {Promise<Object>} - The response from DynamoDB containing the matching items */ async function compareMultipleValues( config, tableName, attributeName, valuesList, partitionKeyName, partitionKeyValue ) { // Initialize the DynamoDB client const client = new DynamoDBClient(config); const docClient = DynamoDBDocumentClient.from(client); // Create the filter expression using the IN operator const filterExpression = `${attributeName} IN (${valuesList.map((_, index) => `:val${index}`).join(', ')})`; // Create expression attribute values for the values list const expressionAttributeValues = valuesList.reduce((acc, val, index) => { acc[`:val${index}`] = val; return acc; }, {}); // If partition key is provided, perform a query operation if (partitionKeyName && partitionKeyValue) { const keyCondition = `${partitionKeyName} = :partitionKey`; expressionAttributeValues[':partitionKey'] = partitionKeyValue; // Initialize array to collect all items let allItems = []; let lastEvaluatedKey; // Use pagination to get all results do { const params = { TableName: tableName, KeyConditionExpression: keyCondition, FilterExpression: filterExpression, ExpressionAttributeValues: expressionAttributeValues }; // Add ExclusiveStartKey if we have a lastEvaluatedKey from a previous query if (lastEvaluatedKey) { params.ExclusiveStartKey = lastEvaluatedKey; } const response = await docClient.send(new QueryCommand(params)); // Add the items from this page to our collection if (response.Items && response.Items.length > 0) { allItems = [...allItems, ...response.Items]; } // Get the key for the next page of results lastEvaluatedKey = response.LastEvaluatedKey; } while (lastEvaluatedKey); // Return the complete result return { Items: allItems, Count: allItems.length }; } else { // Otherwise, perform a scan operation // Initialize array to collect all items let allItems = []; let lastEvaluatedKey; // Use pagination to get all results do { const params = { TableName: tableName, FilterExpression: filterExpression, ExpressionAttributeValues: expressionAttributeValues }; // Add ExclusiveStartKey if we have a lastEvaluatedKey from a previous scan if (lastEvaluatedKey) { params.ExclusiveStartKey = lastEvaluatedKey; } const response = await docClient.send(new ScanCommand(params)); // Add the items from this page to our collection if (response.Items && response.Items.length > 0) { allItems = [...allItems, ...response.Items]; } // Get the key for the next page of results lastEvaluatedKey = response.LastEvaluatedKey; } while (lastEvaluatedKey); // Return the complete result return { Items: allItems, Count: allItems.length }; } } /** * Alternative implementation using multiple OR conditions instead of the IN operator. * * This function is provided for comparison to show why using the IN operator is preferable. * With many values, this approach becomes verbose and less efficient. * * @param {Object} config - AWS configuration object * @param {string} tableName - The name of the DynamoDB table * @param {string} attributeName - The name of the attribute to compare against the values list * @param {Array} valuesList - List of values to compare the attribute against * @param {string} [partitionKeyName] - Optional name of the partition key attribute for query operations * @param {string} [partitionKeyValue] - Optional value of the partition key to query * @returns {Promise<Object>} - The response from DynamoDB containing the matching items */ async function compareWithOrConditions( config, tableName, attributeName, valuesList, partitionKeyName, partitionKeyValue ) { // Initialize the DynamoDB client const client = new DynamoDBClient(config); const docClient = DynamoDBDocumentClient.from(client); // If no values provided, return empty result if (!valuesList || valuesList.length === 0) { return { Items: [], Count: 0 }; } // Create the filter expression using multiple OR conditions const filterConditions = valuesList.map((_, index) => `${attributeName} = :val${index}`); const filterExpression = filterConditions.join(' OR '); // Create expression attribute values for the values list const expressionAttributeValues = valuesList.reduce((acc, val, index) => { acc[`:val${index}`] = val; return acc; }, {}); // If partition key is provided, perform a query operation if (partitionKeyName && partitionKeyValue) { const keyCondition = `${partitionKeyName} = :partitionKey`; expressionAttributeValues[':partitionKey'] = partitionKeyValue; // Initialize array to collect all items let allItems = []; let lastEvaluatedKey; // Use pagination to get all results do { const params = { TableName: tableName, KeyConditionExpression: keyCondition, FilterExpression: filterExpression, ExpressionAttributeValues: expressionAttributeValues }; // Add ExclusiveStartKey if we have a lastEvaluatedKey from a previous query if (lastEvaluatedKey) { params.ExclusiveStartKey = lastEvaluatedKey; } const response = await docClient.send(new QueryCommand(params)); // Add the items from this page to our collection if (response.Items && response.Items.length > 0) { allItems = [...allItems, ...response.Items]; } // Get the key for the next page of results lastEvaluatedKey = response.LastEvaluatedKey; } while (lastEvaluatedKey); // Return the complete result return { Items: allItems, Count: allItems.length }; } else { // Otherwise, perform a scan operation // Initialize array to collect all items let allItems = []; let lastEvaluatedKey; // Use pagination to get all results do { const params = { TableName: tableName, FilterExpression: filterExpression, ExpressionAttributeValues: expressionAttributeValues }; // Add ExclusiveStartKey if we have a lastEvaluatedKey from a previous scan if (lastEvaluatedKey) { params.ExclusiveStartKey = lastEvaluatedKey; } const response = await docClient.send(new ScanCommand(params)); // Add the items from this page to our collection if (response.Items && response.Items.length > 0) { allItems = [...allItems, ...response.Items]; } // Get the key for the next page of results lastEvaluatedKey = response.LastEvaluatedKey; } while (lastEvaluatedKey); // Return the complete result return { Items: allItems, Count: allItems.length }; } }

Esempio di utilizzo del confronto di più valori con AWS SDK per JavaScript.

/** * Example of how to use the compareMultipleValues function. */ async function exampleUsage() { // Example parameters const config = { region: "us-west-2" }; const tableName = "Products"; const attributeName = "Category"; const valuesList = ["Electronics", "Computers", "Accessories"]; console.log(`Searching for products in any of these categories: ${valuesList.join(', ')}`); try { // Using the IN operator (recommended approach) console.log("\nApproach 1: Using the IN operator"); const response = await compareMultipleValues( config, tableName, attributeName, valuesList ); console.log(`Found ${response.Count} products in the specified categories`); // Using multiple OR conditions (alternative approach) console.log("\nApproach 2: Using multiple OR conditions"); const response2 = await compareWithOrConditions( config, tableName, attributeName, valuesList ); console.log(`Found ${response2.Count} products in the specified categories`); // Example with a query operation console.log("\nQuerying a specific manufacturer's products in multiple categories"); const partitionKeyName = "Manufacturer"; const partitionKeyValue = "Acme"; const response3 = await compareMultipleValues( config, tableName, attributeName, valuesList, partitionKeyName, partitionKeyValue ); console.log(`Found ${response3.Count} Acme products in the specified categories`); // Explain the benefits of using the IN operator console.log("\nBenefits of using the IN operator:"); console.log("1. More concise expression compared to multiple OR conditions"); console.log("2. Better readability and maintainability"); console.log("3. Potentially better performance with large value lists"); console.log("4. Simpler code that's less prone to errors"); console.log("5. Easier to modify when adding or removing values"); } catch (error) { console.error("Error:", error); } }
  • Per informazioni dettagliate sull'API, consulta i seguenti argomenti nella Documentazione di riferimento delle API AWS SDK per JavaScript .

Python
SDK per Python (Boto3)

Confronta più valori con un singolo attributo utilizzando AWS SDK per Python (Boto3).

import boto3 from boto3.dynamodb.conditions import Attr, Key from typing import Any, Dict, List, Optional def compare_multiple_values( table_name: str, attribute_name: str, values_list: List[Any], partition_key_name: Optional[str] = None, partition_key_value: Optional[str] = None, ) -> Dict[str, Any]: """ Query or scan a DynamoDB table to find items where an attribute matches any value from a list. This function demonstrates the use of the IN operator to compare a single attribute against multiple possible values, which is more efficient than using multiple OR conditions. Args: table_name (str): The name of the DynamoDB table. attribute_name (str): The name of the attribute to compare against the values list. values_list (List[Any]): List of values to compare the attribute against. partition_key_name (Optional[str]): The name of the partition key attribute for query operations. partition_key_value (Optional[str]): The value of the partition key to query. Returns: Dict[str, Any]: The response from DynamoDB containing the matching items. """ # Initialize the DynamoDB resource dynamodb = boto3.resource("dynamodb") table = dynamodb.Table(table_name) # Create the filter expression using the is_in method filter_expression = Attr(attribute_name).is_in(values_list) # If partition key is provided, perform a query operation if partition_key_name and partition_key_value: key_condition = Key(partition_key_name).eq(partition_key_value) response = table.query( KeyConditionExpression=key_condition, FilterExpression=filter_expression ) else: # Otherwise, perform a scan operation response = table.scan(FilterExpression=filter_expression) # Handle pagination if there are more results items = response.get("Items", []) while "LastEvaluatedKey" in response: if partition_key_name and partition_key_value: response = table.query( KeyConditionExpression=key_condition, FilterExpression=filter_expression, ExclusiveStartKey=response["LastEvaluatedKey"], ) else: response = table.scan( FilterExpression=filter_expression, ExclusiveStartKey=response["LastEvaluatedKey"] ) items.extend(response.get("Items", [])) # Return the complete result return {"Items": items, "Count": len(items)} def compare_with_or_conditions( table_name: str, attribute_name: str, values_list: List[Any], partition_key_name: Optional[str] = None, partition_key_value: Optional[str] = None, ) -> Dict[str, Any]: """ Alternative implementation using multiple OR conditions instead of the IN operator. This function is provided for comparison to show why using the IN operator is preferable. With many values, this approach becomes verbose and less efficient. Args: table_name (str): The name of the DynamoDB table. attribute_name (str): The name of the attribute to compare against the values list. values_list (List[Any]): List of values to compare the attribute against. partition_key_name (Optional[str]): The name of the partition key attribute for query operations. partition_key_value (Optional[str]): The value of the partition key to query. Returns: Dict[str, Any]: The response from DynamoDB containing the matching items. """ # Initialize the DynamoDB resource dynamodb = boto3.resource("dynamodb") table = dynamodb.Table(table_name) # Create a filter expression with multiple OR conditions filter_expression = None for value in values_list: condition = Attr(attribute_name).eq(value) if filter_expression is None: filter_expression = condition else: filter_expression = filter_expression | condition # If partition key is provided, perform a query operation if partition_key_name and partition_key_value and filter_expression: key_condition = Key(partition_key_name).eq(partition_key_value) response = table.query( KeyConditionExpression=key_condition, FilterExpression=filter_expression ) elif filter_expression: # Otherwise, perform a scan operation response = table.scan(FilterExpression=filter_expression) else: # Return empty response if no values provided return {"Items": [], "Count": 0} # Handle pagination if there are more results items = response.get("Items", []) while "LastEvaluatedKey" in response: if partition_key_name and partition_key_value: response = table.query( KeyConditionExpression=key_condition, FilterExpression=filter_expression, ExclusiveStartKey=response["LastEvaluatedKey"], ) else: response = table.scan( FilterExpression=filter_expression, ExclusiveStartKey=response["LastEvaluatedKey"] ) items.extend(response.get("Items", [])) # Return the complete result return {"Items": items, "Count": len(items)}

Esempio di utilizzo del confronto di più valori con AWS SDK per Python (Boto3).

def example_usage(): """Example of how to use the compare_multiple_values function.""" # Example parameters table_name = "Products" attribute_name = "Category" values_list = ["Electronics", "Computers", "Accessories"] print(f"Searching for products in any of these categories: {values_list}") # Using the IN operator (recommended approach) print("\nApproach 1: Using the IN operator") response = compare_multiple_values( table_name=table_name, attribute_name=attribute_name, values_list=values_list ) print(f"Found {response['Count']} products in the specified categories") # Using multiple OR conditions (alternative approach) print("\nApproach 2: Using multiple OR conditions") response2 = compare_with_or_conditions( table_name=table_name, attribute_name=attribute_name, values_list=values_list ) print(f"Found {response2['Count']} products in the specified categories") # Example with a query operation print("\nQuerying a specific manufacturer's products in multiple categories") partition_key_name = "Manufacturer" partition_key_value = "Acme" response3 = compare_multiple_values( table_name=table_name, attribute_name=attribute_name, values_list=values_list, partition_key_name=partition_key_name, partition_key_value=partition_key_value, ) print(f"Found {response3['Count']} Acme products in the specified categories") # Explain the benefits of using the IN operator print("\nBenefits of using the IN operator:") print("1. More concise expression compared to multiple OR conditions") print("2. Better readability and maintainability") print("3. Potentially better performance with large value lists") print("4. Simpler code that's less prone to errors") print("5. Easier to modify when adding or removing values")
  • Per informazioni dettagliate sull'API, consulta i seguenti argomenti nella Documentazione di riferimento delle API SDK AWS per Python (Boto3).