DynamoDB — can not use both expression and non-expression parameters

TL;DR — İsteğiniz, aynı çağrıda bir eski parametre (KeyConditions, QueryFilter, ScanFilter, AttributesToGet, Expected, AttributeUpdates, ConditionalOperator) ile onun ifade eşdeğerini (KeyConditionExpression, FilterExpression, ProjectionExpression, ConditionExpression, UpdateExpression) ayarladı. DynamoDB, iki aileyi karıştırmayı yasaklar. Eski parametreyi kaldırın ve yalnızca ifadeleri kullanın.

Ne anlama gelir

ValidationException: Can not use both expression and non-expression parameters in
the same request: Non-expression parameters: {KeyConditions} Expression
parameters: {KeyConditionExpression}

# what the engine actually returns, reproduced against DynamoDB Local:
ValidationException: Can not use both expression and non-expression parameters in the same request: Non-expression parameters: {KeyConditions} Expression parameters: {KeyConditionExpression}

DynamoDB'nin iki nesil parametresi vardır. Eski aile (KeyConditions, QueryFilter, ScanFilter, AttributesToGet, Expected, AttributeUpdates, ConditionalOperator) ifadelerden öncedir; ifade ailesi (KeyConditionExpression, FilterExpression, ProjectionExpression, ConditionExpression, UpdateExpression) onun yerini aldı. Tek bir istek bir aileye bağlı kalmalıdır — geliştirici kılavuzu, ilgisiz konuları kapsasalar bile DynamoDB'nin "tek bir çağrıda eski koşullu parametreler ile ifade parametrelerinin karıştırılmasına izin vermediğini" açıkça belirtir.

Neden olur

  • Yarı taşınmış kodKeyConditionExpression eklediniz ama aynı params nesnesinde eski bir KeyConditions bıraktınız.
  • Bir projeksiyon çakışmasıProjectionExpression ile birlikte AttributesToGet (eski).
  • Bir filtre çakışmasıFilterExpression ile birlikte ScanFilter/QueryFilter.
  • Bir yazma çakışmasıConditionExpression/UpdateExpression ile birlikte Expected/AttributeUpdates.
  • Sen ifade biçimini ayarlarken eski bir varsayılan enjekte eden bir yardımcı kitaplık.

Nasıl düzeltilir

  1. Eski parametreyi silin. Yalnızca ifade biçimini tutun: KeyConditions yerine KeyConditionExpression, ScanFilter/QueryFilter yerine FilterExpression, AttributesToGet yerine ProjectionExpression, Expected/AttributeUpdates yerine ConditionExpression/UpdateExpression.
  2. Değerleri yer tutuculara taşıyın — eski satır içi değerler ExpressionAttributeValues (:v) olur ve ayrılmış/karmaşık adlar ExpressionAttributeNames (#n) olur.
  3. Tüm params nesnesini denetleyin — çakışma yalnızca aynı konu arasında değil, iki farklı konu arasında da olabilir (örneğin eski projeksiyon + ifade anahtar koşulu).
  4. Her yerde ifadeleri tercih edin — AWS, eski parametreleri yalnızca geriye dönük uyumluluk için tutar ve tüm yeni kod için ifade parametrelerini önerir; ifadeler üzerinde standartlaşmak bu tür hatalardan kaçınır.

Eski sorgu kodunu modernize mi ediyorsunuz? Önce yalnızca ifade içeren isteğin prototipini DynoTable masaüstü uygulamasında oluşturun, sonra üretilen parametreleri uygulamanıza kopyalayın.

DynoTable'da çalıştırın

DynoTable'ün sorgu paneli yalnızca ifade parametrelerini kullanır; oluşturulan isteklerde eski KeyConditions veya ScanFilter alanları mevcut değildir. ⌘K ile bir tablo açın, bir Sorgu veya Tarama oluşturun ve yayılan KeyConditionExpression ve nitelik haritalarını geçişinize kopyalayın.

Eski SDK kodunu yeniden düzenlemeden önce yalnızca ifade isteğinin prototipini oluşturmak için Query Builder'i kullanın. Aşamalandırma (⌘S), yazma işlemi gerçekleştirmeden yeni sorguyu canlı verilerle test etmenize olanak tanır. Profilleri ⌘P ile değiştirin; bunları Ayarlar → Profiller altında Bağlantıyı Test Et ile yapılandırın. Bkz. Connect to AWS ve Install. Eski KeyConditions ve ScanFilter parametreleri DynoTable tarafından oluşturulan isteklerin hiçbir yerinde görünmüyor. SDK sarmalayıcınız hâlâ bunları enjekte ediyorsa, tüm params nesnesini günlüğe kaydedin ve çağrı 16'ya ulaşmadan önce tüm eski anahtarları silin.

Kaynaklar

İlgili hatalar

Kaynaklar

En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.

Console olmadan DynamoDB ile çalış

DynamoDB’nin çalıştıramadığı gerçek SQL’i çalıştıran hızlı bir DynamoDB masaüstü istemcisi — JOINs, GROUP BY, toplamalar — görsel düzenleme ve kendi Bedrock anahtarların üzerinde bir yapay zekâ aracısıyla.

30 günlük ücretsiz deneme, kredi kartı yok — ardından süre sınırı olmayan Ücretsiz plan.