Site Title

Python Lab: Simple DBs

In this lab, you’ll be working on a simple “database” system consisting of dictionaries. The idea here is to understand some basic CRUD actions and how you can use data abstractions (dictionaries in this case) to represent redundant, similar data under a unified structure.

You’ll have to do some research about some Python syntax for this!

You can complete the Python lab by simply running your code and getting your outputs in the Jupyter notebook.

# Our "database" is a list of dictionaries, each representing a record (e.g., a student)
db = [
    {"name": "Alice", "age": 16, "grade": "A"},
    {"name": "Bob", "age": 17, "grade": "B"},
    {"name": "Charlie", "age": 16, "grade": "C"}
]

# Function to display all records
def display_db(database):
    print("All records in the list:")
    for i, record in enumerate(database):
        print(f"Index {i}: {record}")
    print()

# Function to add a new record
def add_record(database):
    name = input("Enter name: ")
    age = int(input("Enter age: "))
    grade = input("Enter grade: ")
    new_record = {"name": name, "age": age, "grade": grade}
    database.append(new_record)
    print("Record added:", new_record)
    display_db(database)

# Function to find a record by name
def find_record(database, search_name):
    for record in database:
        if record["name"] == search_name:
            print("Found record:", record)
            return
    print("Record not found:", search_name)

# Function to update a record
def update_record(database, search_name):
    for record in database:
        if record["name"] == search_name:
            new_age = int(input(f"Enter new age for {search_name} (current: {record['age']}): "))
            new_grade = input(f"Enter new grade for {search_name} (current: {record['grade']}): ")
            record["age"] = new_age
            record["grade"] = new_grade
            print("Updated record:", record)
            display_db(database)
            return
    print("Record not found for update:", search_name)

# Function to delete a record
def delete_record(database, search_name):
    for i, record in enumerate(database):
        if record["name"] == search_name:
            del database[i]
            print("Deleted record:", record)
            display_db(database)
            return
    print("Record not found for deletion:", search_name)

# Example usage
display_db(db)
add_record(db)
find_record(db, "Alice")
update_record(db, "Bob")
delete_record(db, "Charlie")

All records in the list:
Index 0: {'name': 'Alice', 'age': 16, 'grade': 'A'}
Index 1: {'name': 'Bob', 'age': 17, 'grade': 'B'}
Index 2: {'name': 'Charlie', 'age': 16, 'grade': 'C'}

Record added: {'name': 'Bob', 'age': 17, 'grade': 'B'}
All records in the list:
Index 0: {'name': 'Alice', 'age': 16, 'grade': 'A'}
Index 1: {'name': 'Bob', 'age': 17, 'grade': 'B'}
Index 2: {'name': 'Charlie', 'age': 16, 'grade': 'C'}
Index 3: {'name': 'Bob', 'age': 17, 'grade': 'B'}

Found record: {'name': 'Alice', 'age': 16, 'grade': 'A'}
Updated record: {'name': 'Bob', 'age': 15, 'grade': 'C'}
All records in the list:
Index 0: {'name': 'Alice', 'age': 16, 'grade': 'A'}
Index 1: {'name': 'Bob', 'age': 15, 'grade': 'C'}
Index 2: {'name': 'Charlie', 'age': 16, 'grade': 'C'}
Index 3: {'name': 'Bob', 'age': 17, 'grade': 'B'}

Deleted record: {'name': 'Charlie', 'age': 16, 'grade': 'C'}
All records in the list:
Index 0: {'name': 'Alice', 'age': 16, 'grade': 'A'}
Index 1: {'name': 'Bob', 'age': 15, 'grade': 'C'}
Index 2: {'name': 'Bob', 'age': 17, 'grade': 'B'}