У меня есть список таблиц class1, class2, class3... В каждой есть несколько записей, таких как отдел, студент, предметы и т. д.
В записях учащихся есть атрибуты USN, branch, age, DOB, phoneNo, isLeader, isPresident
isLeader = true, если ученик является представителем класса
isPresident = true, если студент является президентом студенческого союза
Если я вставлю isPresident = true для одного ученика из одного класса (таблицы), все записи учащихся должны быть ложными (даже из других классов, поскольку существует несколько классов, но президент студента уникален)
Как только я вставлю isLeader = true
в одну запись, значения isLeader
других таблиц/таблиц должны быть изменены на «false».
Я использую dynamoDB, лямбда-функцию с Python для кодирования.
Вам придется сначала прочитать каждый элемент таблицы, а затем просмотреть результаты с помощью UpdateItem.
Для элементов, где это значение должно быть ложным, установите его так. А для элемента, который должен иметь значение true, установите его в значение true.
У меня есть такая идея, но я не знаю, как ее реализовать
Если вы не знаете, как его кодировать, вы можете получить примеры здесь: github.com/aws-samples/aws-dynamodb-examples/tree/master/…
Я решил эту проблему, используя client.list_tables() ниже приведен код:
import json
import boto3
from boto3 import resource
# Initialize the DynamoDB client
client = boto3.client('dynamodb')
resource = resource('dynamodb')
def lambda_handler(event, context):
# Get a list of all table names
response = client.list_tables()
# String to search for
# search_string = 'rest1'
# List to store tables containing the search string
matching_tables = []
# Check each table name for the search string
for table_name in response['TableNames']:
if "rest1" in table_name:
matching_tables.append(table_name)
print("Aline23 matching_tables",matching_tables)
#Updating rest1_localrest3
if table_name == "rest1_localrest3":
print("Aline35 table_name isDefault will be true: ",table_name)
table = resource.Table(table_name)
response = table.update_item(
Key = {'PK':'restindividual#restaccountinfo', 'SK': 'restaccountinfo'},
UpdateExpression = "SET isDefault = :s",
ExpressionAttributeValues = {':s' : True},
)
#Updating restaurants other than rest1_localrest3
else:
print("Aline35 table_name isDefault will be false: ",table_name)
table = resource.Table(table_name)
response = table.update_item(
Key = {'PK':'restindividual#restaccountinfo', 'SK': 'restaccountinfo'},
UpdateExpression = "SET isDefault = :s",
ExpressionAttributeValues = {':s' : False},
)
# Return the list of matching table names
return {
'body': json.dumps('Updated successfully')
}
Я переформулировал свои требования