Проблема
Я пытаюсь просмотреть таблицу за элементом, поэтому, если элемент уже существует, я смогу обновить его, если нет, то смогу вставить его.
Однако я узнал, что обновление также работает как upsert (update / insert).Мой случай тоже не подходит.
Мой случай
- Проверьте, существует ли в таблице
item
, и сохраните flag
(логическое значение) - Проверьте, является ли
flag
значение 0
, (элемент недоступен), затем вставьте элемент и добавьте текущую метку времени в столбец Inserted_dttm
- Проверьте, если
flag
равно 1
, (элемент доступен), тообновите элемент и добавьте текущую метку времени в столбец Updated_dttm
(а не Inserted_dttm)
Пробная версия
Я искал query()
- хороший вариант для get_item()
, однако ваши решения приветствуются с любым из них.
def lambda_handler(event, context):
x = TrainDataProcess()
file_name = 'Training_data/' + event['file_name']
s3.Object(bucket_name, file_name).download_file('/tmp/temp.xlsx')
table_name = 'training_data'
x.load_excel(name='/tmp/temp.xlsx')
x.load_headers(skiprows=0)
x.data_picking()
table = dynamoDB_client.Table(table_name)
load = x.return_records_json()
try:
with table.batch_writer() as batch:
for record in load:
flag = table.query(TableName=table_name, )
if flag == 0:
record['inserted_dttm'] = get_dttm()
batch.put_item(Item=record)
elif flag == 1:
record['updated_dttm'] = get_dttm()
batch.update_item(Item=record)
return True
except Exception as e:
return e