Flask CRUD

Flask CRUD

Flask, a lightweight and versatile Python web framework, simplifies the creation of web applications. This guide demonstrates how to implement Create, Read, Update, and Delete (CRUD) operations in Flask, complete with examples for building and managing routes.

1. Setting up Flask

Install Flask:
bash

pip install flask


Create a New Flask Project: Create a new Python file (e.g., app.py) and set up the basic CRUD application:

from flask import Flask

app = Flask(__name__)

if __name__ == "__main__":
    app.run(debug=True)

2. CRUD Operations with Flask

Database Setup

For simplicity, this guide uses SQLite with SQLAlchemy for database interaction. Install SQLAlchemy:

bash

pip install flask-sqlalchemy


Define a database model:

from flask_sqlalchemy import SQLAlchemy

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db'
db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100), nullable=False)
    email = db.Column(db.String(100), unique=True, nullable=False)
    active = db.Column(db.Boolean, default=True)

db.create_all()

Create (POST)

In Flask, the Create operation involves defining a route that accepts POST requests to add new records to the database.

Example

from flask import request, jsonify

@app.route('/users', methods=['POST'])
def create_user():
    data = request.get_json()
    new_user = User(name=data['name'], email=data['email'], active=data.get('active', True))
    db.session.add(new_user)
    db.session.commit()
    return jsonify({"message": "User created", "user": {"id": new_user.id, "name": new_user.name}})

Read (GET)

The Read operation retrieves data from the database, either all records or specific ones based on criteria.

Example

@app.route('/users', methods=['GET'])
def get_users():
    users = User.query.all()
    users_list = [{"id": user.id, "name": user.name, "email": user.email, "active": user.active} for user in users]
    return jsonify(users_list)

@app.route('/users/<int:id>', methods=['GET'])
def get_user(id):
    user = User.query.get_or_404(id)
    return jsonify({"id": user.id, "name": user.name, "email": user.email, "active": user.active})

Update (PUT/PATCH)

The Update operation modifies existing data using PUT or PATCH requests.

Example

@app.route('/users/<int:id>', methods=['PUT'])
def update_user(id):
    user = User.query.get_or_404(id)
    data = request.get_json()
    user.name = data.get('name', user.name)
    user.email = data.get('email', user.email)
    user.active = data.get('active', user.active)
    db.session.commit()
    return jsonify({"message": "User updated", "user": {"id": user.id, "name": user.name}})

Delete (DELETE)

The Delete operation removes a record from the database using the DELETE HTTP method.

Example

@app.route('/users/<int:id>', methods=['DELETE'])
def delete_user(id):
    user = User.query.get_or_404(id)
    db.session.delete(user)
    db.session.commit()
    return jsonify({"message": "User deleted"})

3. Flask CRUD project example

Here’s how the final app.py file looks:

from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db'
db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100), nullable=False)
    email = db.Column(db.String(100), unique=True, nullable=False)
    active = db.Column(db.Boolean, default=True)

db.create_all()

@app.route('/users', methods=['POST'])
def create_user():
    data = request.get_json()
    new_user = User(name=data['name'], email=data['email'], active=data.get('active', True))
    db.session.add(new_user)
    db.session.commit()
    return jsonify({"message": "User created", "user": {"id": new_user.id, "name": new_user.name}})

@app.route('/users', methods=['GET'])
def get_users():
    users = User.query.all()
    users_list = [{"id": user.id, "name": user.name, "email": user.email, "active": user.active} for user in users]
    return jsonify(users_list)

@app.route('/users/<int:id>', methods=['GET'])
def get_user(id):
    user = User.query.get_or_404(id)
    return jsonify({"id": user.id, "name": user.name, "email": user.email, "active": user.active})

@app.route('/users/<int:id>', methods=['PUT'])
def update_user(id):
    user = User.query.get_or_404(id)
    data = request.get_json()
    user.name = data.get('name', user.name)
    user.email = data.get('email', user.email)
    user.active = data.get('active', user.active)
    db.session.commit()
    return jsonify({"message": "User updated", "user": {"id": user.id, "name": user.name}})

@app.route('/users/<int:id>', methods=['DELETE'])
def delete_user(id):
    user = User.query.get_or_404(id)
    db.session.delete(user)
    db.session.commit()
    return jsonify({"message": "User deleted"})

if __name__ == "__main__":
    app.run(debug=True)

Notable libraries and example projects

  1. Flask App Builder - Framework for building CRUD apps in Flask with built-in authentication and roles
  2. Flask Vue.js CRUD - Example of a full-stack CRUD application using Flask for the backend and Vue.js for the frontend