Flask Training , study and exam guide
1 Introduction to Flask
1.1 What is Flask?
1.2 History and Evolution of Flask
1.3 Flask vs Django
1.4 Setting Up the Development Environment
2 Flask Basics
2.1 Installing Flask
2.2 Creating Your First Flask Application
2.3 Understanding the Flask Application Structure
2.4 Routing in Flask
2.5 Variable Rules in Routing
2.6 HTTP Methods (GET, POST, PUT, DELETE)
3 Templates and Static Files
3.1 Introduction to Jinja2 Templates
3.2 Rendering Templates
3.3 Template Inheritance
3.4 Static Files (CSS, JavaScript, Images)
3.5 Using Bootstrap with Flask
4 Forms and User Input
4.1 Introduction to Flask-WTF
4.2 Creating Forms with Flask-WTF
4.3 Validating User Input
4.4 Handling File Uploads
4.5 Flash Messages
5 Databases with Flask
5.1 Introduction to SQLAlchemy
5.2 Setting Up a Database
5.3 Defining Models
5.4 CRUD Operations with SQLAlchemy
5.5 Relationships in SQLAlchemy
5.6 Migrations with Flask-Migrate
6 Authentication and Authorization
6.1 Introduction to Flask-Login
6.2 User Authentication
6.3 Protecting Routes with Login Required
6.4 User Roles and Permissions
6.5 Password Hashing with Werkzeug
7 RESTful APIs with Flask
7.1 Introduction to RESTful APIs
7.2 Creating a RESTful API with Flask
7.3 Serializing and Deserializing Data
7.4 Handling API Errors
7.5 Authentication for APIs
8 Testing Flask Applications
8.1 Introduction to Unit Testing
8.2 Writing Tests with Flask-Testing
8.3 Testing Routes and Views
8.4 Testing Database Interactions
8.5 Continuous Integration with Flask
9 Deployment and Scaling
9.1 Introduction to Deployment
9.2 Deploying Flask Applications on Heroku
9.3 Deploying Flask Applications on AWS
9.4 Scaling Flask Applications
9.5 Load Balancing and Caching
10 Advanced Topics
10.1 Background Tasks with Celery
10.2 WebSockets with Flask-SocketIO
10.3 Internationalization and Localization
10.4 Custom Error Pages
10.5 Extending Flask with Blueprints
11 Exam Preparation
11.1 Review of Key Concepts
11.2 Practice Questions
11.3 Mock Exams
11.4 Tips for the Exam Day
CRUD Operations with SQLAlchemy

CRUD Operations with SQLAlchemy

Key Concepts

Create

The "Create" operation involves adding new records to a database table. In SQLAlchemy, this is typically done by creating an instance of the model class and adding it to the session.

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from models import User

engine = create_engine('sqlite:///example.db')
Session = sessionmaker(bind=engine)
session = Session()

new_user = User(name='John Doe', email='john@example.com')
session.add(new_user)
session.commit()
    

Read

The "Read" operation involves querying the database to retrieve existing records. SQLAlchemy provides a powerful query API to filter and retrieve data.

from sqlalchemy.orm import sessionmaker
from models import User

Session = sessionmaker(bind=engine)
session = Session()

users = session.query(User).all()
for user in users:
    print(user.name, user.email)

specific_user = session.query(User).filter_by(name='John Doe').first()
print(specific_user.name, specific_user.email)
    

Update

The "Update" operation involves modifying existing records in the database. This is done by querying the record, making changes to it, and then committing the session.

from sqlalchemy.orm import sessionmaker
from models import User

Session = sessionmaker(bind=engine)
session = Session()

user_to_update = session.query(User).filter_by(name='John Doe').first()
user_to_update.email = 'john.doe@example.com'
session.commit()
    

Delete

The "Delete" operation involves removing records from the database. This is done by querying the record and then deleting it from the session.

from sqlalchemy.orm import sessionmaker
from models import User

Session = sessionmaker(bind=engine)
session = Session()

user_to_delete = session.query(User).filter_by(name='John Doe').first()
session.delete(user_to_delete)
session.commit()
    

Example: Full CRUD Operations

Here is a complete example demonstrating all CRUD operations on a simple User model.

from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    email = Column(String)

engine = create_engine('sqlite:///example.db')
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()

# Create
new_user = User(name='John Doe', email='john@example.com')
session.add(new_user)
session.commit()

# Read
users = session.query(User).all()
for user in users:
    print(user.name, user.email)

# Update
user_to_update = session.query(User).filter_by(name='John Doe').first()
user_to_update.email = 'john.doe@example.com'
session.commit()

# Delete
user_to_delete = session.query(User).filter_by(name='John Doe').first()
session.delete(user_to_delete)
session.commit()