Bird
Raised Fist0
Flaskframework~3 mins

Why Column types and constraints in Flask? - Purpose & Use Cases

Choose your learning style10 modes available
The Big Idea

What if your database could catch mistakes before they cause problems?

The Scenario

Imagine building a web app where you manually check every user input to make sure emails look right, numbers are in range, and text isn't too long before saving to your database.

The Problem

Manually checking and cleaning data every time is slow, easy to forget, and causes bugs when invalid data sneaks in. It's like trying to catch every raindrop with a bucket instead of using an umbrella.

The Solution

Using column types and constraints in your database models automatically enforces rules like data format and length. This means your app only saves valid data, reducing errors and saving you time.

Before vs After
✗ Before
if len(username) > 20:
    return 'Error: username too long'
if '@' not in email:
    return 'Error: invalid email'
✓ After
username = Column(String(20), nullable=False)
email = Column(String(120), unique=True, nullable=False)
What It Enables

This lets your app trust the data it stores, making it safer, cleaner, and easier to work with.

Real Life Example

Think of a signup form where the database won't accept duplicate emails or empty usernames because the column constraints catch these issues automatically.

Key Takeaways

Manual data checks are slow and error-prone.

Column types and constraints enforce data rules automatically.

This leads to safer and more reliable applications.

Practice

(1/5)
1. Which SQLAlchemy column type should you use in Flask to store text data of variable length?
easy
A. db.String
B. db.Integer
C. db.Boolean
D. db.DateTime

Solution

  1. Step 1: Understand column types for text data

    Text data of variable length is best stored using a string type that allows flexible length.
  2. Step 2: Match the correct SQLAlchemy type

    db.String is designed for variable-length text, unlike db.Integer or db.Boolean.
  3. Final Answer:

    db.String -> Option A
  4. Quick Check:

    Variable-length text = db.String [OK]
Hint: Text data uses db.String type in Flask models [OK]
Common Mistakes:
  • Choosing db.Integer for text data
  • Using db.Boolean for strings
  • Confusing db.DateTime with text types
2. Which of the following is the correct way to declare a non-nullable integer column named age in a Flask model?
easy
A. age = db.Column(db.Integer, nullable=True)
B. age = db.Column(db.Boolean, nullable=False)
C. age = db.Column(db.String, nullable=False)
D. age = db.Column(db.Integer, nullable=False)

Solution

  1. Step 1: Identify the correct type for age

    Age should be stored as an integer, so db.Integer is correct.
  2. Step 2: Set the nullable constraint

    To make the column non-nullable, use nullable=False.
  3. Final Answer:

    age = db.Column(db.Integer, nullable=False) -> Option D
  4. Quick Check:

    Integer + non-nullable = age = db.Column(db.Integer, nullable=False) [OK]
Hint: Use nullable=False to prevent empty values [OK]
Common Mistakes:
  • Setting nullable=True when non-null is needed
  • Using wrong data type like String for age
  • Confusing Boolean with Integer type
3. Given this Flask model column declaration:
email = db.Column(db.String(120), unique=True, nullable=False)

What does the unique=True constraint do?
medium
A. Prevents duplicate email values in the table
B. Makes the email column optional
C. Allows multiple rows to have the same email
D. Automatically converts emails to lowercase

Solution

  1. Step 1: Understand the unique constraint

    The unique=True constraint ensures no two rows have the same value in this column.
  2. Step 2: Apply this to the email column

    This means duplicate emails are not allowed, keeping each email distinct.
  3. Final Answer:

    Prevents duplicate email values in the table -> Option A
  4. Quick Check:

    unique=True means no duplicates [OK]
Hint: unique=True means no two rows share the same value [OK]
Common Mistakes:
  • Thinking unique=True allows duplicates
  • Confusing unique with nullable
  • Assuming unique changes data format
4. What is wrong with this Flask model column declaration?
price = db.Column(db.String, nullable=False, unique='yes')
medium
A. The nullable argument cannot be used with unique
B. The unique argument should be a boolean, not a string
C. The column type db.String cannot be used for price
D. The column name price is a reserved keyword

Solution

  1. Step 1: Check the unique argument type

    The unique parameter expects a boolean value (True or False), not a string.
  2. Step 2: Identify the error in the code

    Passing unique='yes' is invalid and will cause an error.
  3. Final Answer:

    The unique argument should be a boolean, not a string -> Option B
  4. Quick Check:

    unique must be True or False, not 'yes' [OK]
Hint: unique must be True/False, never a string [OK]
Common Mistakes:
  • Using string values for boolean parameters
  • Thinking nullable and unique conflict
  • Assuming price is reserved keyword
5. You want to create a Flask model column for a user's phone number that must be exactly 10 digits, unique, and cannot be empty. Which declaration is best?
hard
A. phone = db.Column(db.String, unique=False, nullable=False)
B. phone = db.Column(db.Integer, unique=True, nullable=False)
C. phone = db.Column(db.String(10), unique=True, nullable=False)
D. phone = db.Column(db.String(15), nullable=True)

Solution

  1. Step 1: Choose the correct type for phone numbers

    Phone numbers often contain leading zeros, so db.String(10) is better than db.Integer.
  2. Step 2: Apply constraints for uniqueness and non-null

    Use unique=True to prevent duplicates and nullable=False to disallow empty values.
  3. Final Answer:

    phone = db.Column(db.String(10), unique=True, nullable=False) -> Option C
  4. Quick Check:

    String(10) + unique + non-null = phone = db.Column(db.String(10), unique=True, nullable=False) [OK]
Hint: Use String with length, unique=True, nullable=False for fixed phone numbers [OK]
Common Mistakes:
  • Using Integer type losing leading zeros
  • Allowing nullable=True when value is required
  • Ignoring unique constraint for phone numbers
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard