@@ -440,6 +440,12 @@ def _convert_condition_base_to_expression(
440440 key_condition_expression : ConditionBase , is_key_condition : bool , serializer : TypeSerializer
441441) -> dict [str , Any ]:
442442 builder = ConditionExpressionBuilder ()
443+
444+ # Use different namespaces for key and filter conditions
445+ if is_key_condition :
446+ builder ._name_placeholder = "kn"
447+ builder ._value_placeholder = "kv"
448+
443449 expression = builder .build_expression (key_condition_expression , is_key_condition = is_key_condition )
444450
445451 return _ExpressionTuple (
@@ -692,8 +698,15 @@ def read_items( # noqa: PLR0912
692698 key_condition_expression , is_key_condition = True , serializer = serializer
693699 )
694700 kwargs ["KeyConditionExpression" ] = expression_tuple .condition_expression
695- kwargs ["ExpressionAttributeNames" ] = expression_tuple .attribute_name_placeholders
696- kwargs ["ExpressionAttributeValues" ] = expression_tuple .attribute_value_placeholders
701+
702+ kwargs ["ExpressionAttributeNames" ] = {
703+ ** kwargs .get ("ExpressionAttributeNames" , {}),
704+ ** expression_tuple .attribute_name_placeholders ,
705+ }
706+ kwargs ["ExpressionAttributeValues" ] = {
707+ ** kwargs .get ("ExpressionAttributeValues" , {}),
708+ ** expression_tuple .attribute_value_placeholders ,
709+ }
697710
698711 if filter_expression :
699712 if isinstance (filter_expression , str ):
@@ -703,15 +716,28 @@ def read_items( # noqa: PLR0912
703716 filter_expression , is_key_condition = False , serializer = serializer
704717 )
705718 kwargs ["FilterExpression" ] = expression_tuple .condition_expression
706- kwargs ["ExpressionAttributeNames" ] = expression_tuple .attribute_name_placeholders
707- kwargs ["ExpressionAttributeValues" ] = expression_tuple .attribute_value_placeholders
719+
720+ kwargs ["ExpressionAttributeNames" ] = {
721+ ** kwargs .get ("ExpressionAttributeNames" , {}),
722+ ** expression_tuple .attribute_name_placeholders ,
723+ }
724+ kwargs ["ExpressionAttributeValues" ] = {
725+ ** kwargs .get ("ExpressionAttributeValues" , {}),
726+ ** expression_tuple .attribute_value_placeholders ,
727+ }
708728
709729 if columns :
710730 kwargs ["ProjectionExpression" ] = ", " .join (columns )
711731 if expression_attribute_names :
712- kwargs ["ExpressionAttributeNames" ] = expression_attribute_names
732+ kwargs ["ExpressionAttributeNames" ] = {
733+ ** kwargs .get ("ExpressionAttributeNames" , {}),
734+ ** expression_attribute_names ,
735+ }
713736 if expression_attribute_values :
714- kwargs ["ExpressionAttributeValues" ] = _serialize_item (expression_attribute_values , serializer )
737+ kwargs ["ExpressionAttributeValues" ] = {
738+ ** kwargs .get ("ExpressionAttributeValues" , {}),
739+ ** _serialize_item (expression_attribute_values , serializer ),
740+ }
715741 if max_items_evaluated :
716742 kwargs ["Limit" ] = max_items_evaluated
717743
0 commit comments