Welcome back! So far, you have set up your Flask app, designed your database models, and learned how to safely reset your database. Now, let’s take the next step: adding recipes to your app.
While it’s possible to add recipes automatically or through an API, sometimes you need a simple way to enter recipes by hand. This is especially useful for testing, quick data entry, or when you want to add a recipe that you found or created yourself. In this lesson, you’ll learn how to build a Python script that lets you add recipes directly from the command line. This script will prompt you for the recipe name, ingredients, and steps, then save everything to your database.
By the end of this lesson, you’ll be able to run a script, enter a new recipe, and see it appear in your app’s database. This is a practical tool that will help you test and grow your cooking app.
Before we dive in, let’s quickly remind ourselves of the key models and how we interact with the database. You’ve already created Recipe
and Ingredient
models using SQLAlchemy. These models are connected by a many-to-many relationship, which means a recipe can have many ingredients, and an ingredient can belong to many recipes.
Here’s a quick reminder of what these models look like:
You also learned how to use db.session
to add and commit changes to your database. In this lesson, we’ll use these same models and session methods to save new recipes and ingredients.
To create a script that can add recipes, you need to make sure it can access your Flask app and its database models. This means importing the right modules and setting up the app context.
Let’s start by importing the necessary modules and making sure our script can find the Flask app and models:
os
andsys
are standard Python modules that help us work with file paths and system settings.sys.path.insert(...)
adds thecooking_helper
directory to the Python path, so we can import our app and models.- We import
create_app
to set up the Flask app and import ourRecipe
,Ingredient
, anddb
objects.
Next, we need to make sure our script runs inside the Flask app context. This is important because SQLAlchemy needs the app context to access the database:
By wrapping our code in with app.app_context():
, we make sure all database actions work as expected.
Now, let’s build the part of the script that asks the user for recipe details. We want to collect three things: the recipe name, a list of ingredients, and the steps.
We start by asking for the recipe name:
input()
displays a prompt and waits for the user to type something..strip()
removes any extra spaces from the beginning or end.- If the user doesn’t enter a name, we print an error and stop.
Next, we ask for ingredients, one per line. The user can press Enter on an empty line to finish:
- We use a loop to keep asking for ingredients until the user enters a blank line.
- Each ingredient is added to a list.
- If the list is empty, we print an error and stop.
Finally, we ask for the steps. The user can type as many lines as they want and type END
on a line by itself to finish:
- This function collects each line of the steps until the user types
END
. - All lines are joined together into a single string.
Here’s what it looks like when you run this part of the script:
Now that we have the recipe details, let’s save them to the database. We need to:
- Create a new
Recipe
object. - For each ingredient, check if it already exists. If not, create it.
- Link each ingredient to the recipe.
- Add the recipe to the session and commit.
Here’s how we do it:
Let’s break this down:
- We create a new
Recipe
object with the name and steps. - For each ingredient name, we:
- Clean it up with
.strip().lower()
to avoid duplicates like "Sugar" and "sugar." - Check if the ingredient already exists in the database using
Ingredient.query.filter_by(name=ing_name).first()
. - If it doesn’t exist, we create a new
Ingredient
and add it to the session. - We add the ingredient to the recipe’s
ingredients
list.
- Clean it up with
- After all ingredients are linked, we add the recipe to the session and commit the changes.
- Finally, we print a success message.
If everything works, you’ll see:
In this lesson, you learned how to build a script that lets you add recipes manually to your cooking app’s database. You saw how to:
- Set up your script to access the Flask app and database models
- Prompt the user for recipe details and validate their input
- Create or reuse ingredients and link them to a new recipe
- Save everything to the database and confirm success
This script is a practical tool for quickly adding recipes, testing your app, or entering your own creations. Now that you understand how it works, you’re ready to try it yourself in the practice exercises. Focus on running the script, entering different recipes, and checking your database to see the results. This hands-on practice will help you get comfortable with both Python scripting and database operations in your Flask app. Good luck!
