from flask import Flask, jsonify, request
from flask_sqlalchemy import SQLAlchemy
# Initialize Flask application and SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db' # Configure the database URI
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # disable the feature of flask_sqlalchemy that signals the application everytime a change is about to be made in the database
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True) # Define the primary key
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
posts = db.relationship('Post', backref='author', lazy=True, cascade="all, delete-orphan")
def __repr__(self):
return '<User %r>' % self.username
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(120), nullable=False)
content = db.Column(db.String(500), nullable=False)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
def __repr__(self):
return '<Post %r>' % self.title
# Define a route that returns all users in JSON format
@app.route('/users', methods=['GET'])
def get_all_users():
users = User.query.all()
return jsonify([e.serialize() for e in users])
# Define a route that deletes all users
@app.route('/users', methods=['DELETE'])
def delete_all_users():
try:
num_rows_deleted = db.session.query(User).delete()
db.session.commit()
return jsonify({"message": "All users deleted successfully", "rows_deleted": num_rows_deleted})
except:
db.session.rollback()
return jsonify({"message": "An error occurred while deleting users"})
# Define a route that returns a user by id
@app.route('/users/<int:id>', methods=['GET'])
def get_user_by_id(id):
user = User.query.get(id)
if user:
return jsonify(user.serialize())
else:
return jsonify({"message": "User not found"}), 404
if __name__ == '__main__':
db.create_all() # create the table in the database if it does not exist
app.run(debug=True) # run the application in debug mode