Примечание также размещено на github boto3 https://github.com/boto/boto3/issues/2383
Я пытаюсь добавить элемент в таблицу Dynamo, используя Boto3. Хотя я могу успешно добавить элемент в таблицу, используя «table.put_item», но новая запись не соответствует схеме. Например, чтобы успешно добавить элемент, я должен предоставить «идентификатор», хотя схема указывает, что идентификатор должен генерироваться DynamoDB напрямую. Кроме того, некоторые элементы новой записи должны быть сопоставлены с выборками из перечислений, но вместо этого хранятся в виде строк.
Мой вопрос заключается в том, могу ли я заставить Boto3 применять те же ограничения при создании нового объекта, как и из используя GraphQl / Amplify?
Следуйте псевдо-схеме и коду.
Pseudo Schema
type User @model {
id: ID!
xxxxxx1: String!
xxxxxx2: [Choice1!]
xxxxxx3: Float!
}
enum Choice1 {
A
b
}
Pseudo code (python)
import json
import uuid
import boto3
from decimal import Decimal
session = boto3.Session (profile_name= 'botoUser')
credentials = session.get_credentials ()
credentials = credentials.get_frozen_credentials()
access_key = credentials.access_key
secret_key = credentials.secret_key
token = credentials.token
table_name = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-dev'
dynamodb = boto3.resource('dynamodb',
region_name='us-east-1',
aws_access_key_id=access_key,
aws_secret_access_key=secret_key,
aws_session_token=token)
table = dynamodb.Table(table_name)
item = {xxxxxx1: 'name', xxxxxx2: 'A', 'xxxxxx3': 1.0}
item_json = json.dumps (item)
item_obj = json.loads (item_json, parse_float=Decimal)
item_obj[id] = str (uuid.uuid4())
table.put_item (
Item=item_obj
)
Results in the DB (from the Amplify Console)
id: guid as a string as provided in the update
xxxxxx1: 'name'
xxxxxx2: 'A' (not a selection from Choice1)
xxxxxx3: 1.0
Additionally __typename and createdAt are not set for the new item.
...