ExpressionAttributeNames contiene una chiave non valida: errore di sintassi
TL;DR — Il problema è la chiave segnaposto sul lato sinistro della mappa ExpressionAttributeNames, non l'attributo a cui punta. Un segnaposto deve essere "#" seguito da semplici lettere, cifre o trattini bassi (#nome, #p0). Se inserisci il nome reale dell'attributo, con i suoi punti, trattini, segni + o spazi, nel segnaposto stesso, DynamoDB rifiuta la mappa. Mantieni i segnaposto noiosi; metti il vero nome disordinato sul lato destro.
Cosa significa
ValidationException: 1 validation error detected: ExpressionAttributeNames contains invalid key:
Syntax error; key: "#my.attribute"
# what the engine actually returns, reproduced against DynamoDB Local:
ValidationException: 1 validation error detected: ExpressionAttributeNames contains invalid key: Syntax error; key: "#my.attribute""ExpressionAttributeNames" mappa un token segnaposto (utilizzato all'interno dell'espressione) su un nome di attributo reale. DynamoDB convalida la sintassi del segnaposto prima di toccare i tuoi dati: deve iniziare con # e contenere solo caratteri validi all'interno di un token di espressione. I caratteri speciali che significano qualcosa nella grammatica dell'espressione — . (separatore del percorso), -, +, spazi — rendono il segnaposto stesso non analizzabile e l'intera richiesta viene rifiutata con questa ValidationException.
Perché succede
- Il nome dell'attributo reale è stato copiato nel segnaposto — ad es.
{"#stats.daily": "stats.daily"}. Il punto nella chiave è un errore di sintassi, indipendentemente da ciò a cui è associato. - Caratteri speciali nel segnaposto: trattini (
#user-id), segni+o spazi. Solo i caratteri alfanumerici e i caratteri di sottolineatura sono sicuri dopo "#". - Un
#mancante: le chiavi inExpressionAttributeNamesdevono iniziare con#;{"name": "name"}non è valido. - Una libreria che genera automaticamente segnaposto dai nomi degli attributi che contengono punti o caratteri speciali, facendo passare il carattere direttamente.
Come risolverlo
Utilizza semplici segnaposto e associa ciascuno al nome reale:
{ ExpressionAttributeNames: {'#p0': 'user-id', '#p1': 'stats'}, KeyConditionExpression: '#p0 = :uid' }Per percorsi nidificati, alias ciascun segmento separatamente: un segnaposto per elemento del percorso, unito da un punto letterale nell'espressione:
// read stats.daily where the item has a top-level "stats" map { ProjectionExpression: '#s.#d', ExpressionAttributeNames: {'#s': 'stats', '#d': 'daily'} }Nota il rovescio della medaglia: se il nome effettivo dell'attributo contiene un punto letterale (un attributo chiamato
"stats.daily", non un percorso annidato), un singolo segnaposto per l'intero nome è esattamente quello che desideri —{'#sd': 'stats.daily'}— quindi il punto viene trattato come parte del nome, non come separatore di percorso.Controlla cosa genera il tuo wrapper: se un ODM/helper crea la mappa per te, registra la richiesta finale e controlla le chiavi segnaposto che ha prodotto.
Non inserire mai separatori di percorso nelle chiavi segnaposto. I punti appartengono alla stringa dell'espressione tra i token "#segment" e non all'interno di una singola chiave "#".
Verificalo in DynoTable
DynoTable crea query con semplici segnaposto con prefisso #: i nomi degli attributi con punti, trattini o parole riservate hanno un alias corretto sul lato destro della mappa. Apri una tabella con ⌘K, aggiungi filtri e copia gli ExpressionAttributeNames generati.
Effettua un controllo incrociato dei nomi degli attributi nel controllo parole riservate quando scrivi alias a mano. Cambia profilo con ⌘P; vedere Connetti a AWS e Installa.
Fonti
- Nomi degli attributi di espressione (alias) in DynamoDB (verificato il 13-07-2026)
- Parole riservate in DynamoDB (verificato il 13-07-2026)
Errori correlati
- Il nome dell'attributo è una parola chiave riservata — l'altro grande motivo per utilizzare "ExpressionAttributeNames".
- Valore fornito in ExpressionAttributeNames non utilizzato nelle espressioni
- Valore fornito in ExpressionAttributeValues non utilizzato
- Impara: Nomi e valori delle espressioni
Riferimenti
- Nomi degli attributi di espressione (alias) in DynamoDB - Guida per sviluppatori di Amazon DynamoDB
- Query: riferimento Amazon DynamoDB API
- Parole riservate in DynamoDB - Guida per sviluppatori di Amazon DynamoDB
Ultima verifica il 13-07-2026 rispetto alla documentazione ufficiale del AWS collegata sopra.