Bulk operations let you handle many items at once. This saves time and makes your app faster.
When you want to add many records to a database in one go.
When you need to update multiple items with one request.
When deleting several entries at the same time.
When processing a list of data from a user or file upload.
When you want to reduce the number of server calls for efficiency.
Syntax
FastAPI
from fastapi import FastAPI
from pydantic import BaseModel
from typing import List
app = FastAPI()
class Item(BaseModel):
name: str
price: float
@app.post("/items/bulk")
asyncdef create_items(items: List[Item]):
# process list of itemsreturn {"count": len(items), "items": items}
Use List[YourModel] to accept multiple items in the request body.
FastAPI automatically parses the JSON array into Python list of models.
Examples
This endpoint accepts many users at once and returns how many were added.
FastAPI
from typing import List
@app.post("/users/bulk")
asyncdef add_users(users: List[User]):
return {"added": len(users)}
Use PUT with a list to update multiple products in one request.
FastAPI
from pydantic import BaseModel
class Product(BaseModel):
id: int
name: str
@app.put("/products/bulk")
asyncdef update_products(products: List[Product]):
return {"updated": len(products)}
Sample Program
This FastAPI app lets you send many items in one request. It saves them in a list and returns all saved items.
FastAPI
from fastapi import FastAPI
from pydantic import BaseModel
from typing import List
app = FastAPI()
class Item(BaseModel):
name: str
price: float
items_db = []
@app.post("/items/bulk")
asyncdef create_items(items: List[Item]):
for item in items:
items_db.append(item)
return {"message": f"Added {len(items)} items.", "items": items_db}
OutputSuccess
Important Notes
Make sure your client sends a JSON array for bulk operations.
Validate each item with Pydantic models to catch errors early.
Bulk operations reduce network overhead by combining many actions into one.
Summary
Bulk operations handle many items in one request.
Use List[Model] in FastAPI to accept multiple objects.
This improves speed and reduces server calls.
Practice
(1/5)
1. What is the main benefit of using bulk operations in FastAPI?
easy
A. They limit the number of items processed to one per request.
B. They automatically generate HTML forms for data input.
C. They encrypt data before sending it to the client.
D. They allow handling many items in a single request, reducing server calls.
Solution
Step 1: Understand bulk operations purpose
Bulk operations let you send many items at once instead of one by one.
Step 2: Identify the main benefit
This reduces the number of server calls and speeds up processing.
Final Answer:
They allow handling many items in a single request, reducing server calls. -> Option D
Quick Check:
Bulk operations = fewer server calls [OK]
Hint: Bulk means many items at once, not one by one [OK]
Common Mistakes:
Thinking bulk operations encrypt data
Confusing bulk with form generation
Assuming bulk limits to one item
2. Which of the following is the correct way to accept multiple items in a FastAPI endpoint using Pydantic models?
easy
A. def create_items(items: ItemModel[]):
B. def create_items(item: ItemModel):
C. def create_items(items: List[ItemModel]):
D. def create_items(items: Dict[ItemModel]):
Solution
Step 1: Recall FastAPI typing for multiple items
FastAPI uses Python typing List[Model] to accept multiple objects.
Step 2: Check each option's syntax
def create_items(items: List[ItemModel]): uses List[ItemModel], which is correct. def create_items(item: ItemModel): accepts one item only. def create_items(items: ItemModel[]): uses invalid syntax. def create_items(items: Dict[ItemModel]): uses Dict which is not for lists.
Final Answer:
def create_items(items: List[ItemModel]): -> Option C
Quick Check:
Multiple items = List[Model] [OK]
Hint: Use List[Model] to accept many items in FastAPI [OK]
Common Mistakes:
Using ItemModel[] which is invalid syntax
Using Dict instead of List for multiple items
Forgetting to import List from typing
3. Given this FastAPI endpoint:
from fastapi import FastAPI
from pydantic import BaseModel
from typing import List
app = FastAPI()
class Item(BaseModel):
name: str
price: float
@app.post('/items/')
async def create_items(items: List[Item]):
return {'count': len(items), 'names': [item.name for item in items]}
What will be the response if the client sends this JSON body?
The endpoint accepts a list of Item objects and returns count and names list.
Step 2: Analyze input JSON
The input has two items with names 'apple' and 'banana'.
Step 3: Predict output
Count is 2, names list contains both names.
Final Answer:
{"count": 2, "names": ["apple", "banana"]} -> Option B
Quick Check:
List length = 2, names extracted correctly [OK]
Hint: Count list length and extract names from each item [OK]
Common Mistakes:
Assuming only one item processed
Expecting validation error without reason
Returning empty list mistakenly
4. Identify the error in this FastAPI bulk operation endpoint:
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class User(BaseModel):
username: str
age: int
@app.post('/users/')
async def create_users(users: User):
return {'usernames': [user.username for user in users]}
medium
A. The parameter 'users' should be a list type like List[User].
B. The return statement should not use list comprehension.
C. The User model is missing required fields.
D. The endpoint path should be '/user/' not '/users/'.
Solution
Step 1: Check parameter type for bulk input
The parameter 'users' is typed as User, which accepts one object, not multiple.
Step 2: Identify correct typing for multiple users
To accept many users, it should be List[User] from typing module.
Final Answer:
The parameter 'users' should be a list type like List[User]. -> Option A
Quick Check:
Bulk input needs List[Model] type [OK]
Hint: Bulk input must be List[Model], not single Model [OK]
Common Mistakes:
Using single model instead of list for bulk
Thinking list comprehension causes error
Confusing endpoint path naming
5. You want to create a FastAPI endpoint that accepts a bulk list of products but only saves those with price greater than 10. Which code snippet correctly implements this filtering inside the endpoint?
hard
A. async def create_products(products: List[Product]):
filtered = [p for p in products if p.price > 10]
return {'saved': len(filtered)}
B. async def create_products(products: List[Product]):
filtered = [p for p in products if p.price < 10]
return {'saved': len(filtered)}
C. async def create_products(products: Product):
filtered = [p for p in products if p.price > 10]
return {'saved': len(filtered)}