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
- Flask App Builder - Framework for building CRUD apps in Flask with built-in authentication and roles
- Flask Vue.js CRUD - Example of a full-stack CRUD application using Flask for the backend and Vue.js for the frontend