- SETTING UP ENVIRONMENT on Ubuntu20:
(base) ubuntu@ubunu2004:~$ mkdir flaskdbexample
(base) ubuntu@ubunu2004:~$ cd flaskdbexample
(base) ubuntu@ubunu2004:~/flaskdbexample$ sudo apt install python3-virtualenv
(base) ubuntu@ubunu2004:~/flaskdbexample$ virtualenv venv
created virtual environment CPython3.8.2.final.0-64 in 805ms
(base) ubuntu@ubunu2004:~/flaskdbexample/venv/bin$ source ./activate
(venv) (base) ubuntu@ubunu2004:~$ cd flaskdbexample/
(venv) (base) ubuntu@ubunu2004:~/flaskdbexample$ pip install flask flask-sqlalchemy
(venv) (base) ubuntu@ubunu2004:~/flaskdbexample$ pip install pymysql
(venv) (base) ubuntu@ubunu2004:~/flaskdbexample$ pip install marshmallow_sqlalchemy
- Complete Code
(venv) (base) ubuntu@ubunu2004:~/flaskdbexample$ vi app.py
from flask import Flask, request, jsonify, make_response from flask_sqlalchemy import SQLAlchemy from marshmallow_sqlalchemy import ModelSchema from marshmallow import fields app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://monty:password@192.168.0.43/EmployeeDB' db = SQLAlchemy(app) ###Models#### class Product(db.Model): __tablename__ = "products" id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(20)) productDescription = db.Column(db.String(100)) productBrand = db.Column(db.String(20)) price = db.Column(db.Integer) def create(self): db.session.add(self) db.session.commit() return self def __init__(self,title,productDescription,productBrand,price): self.title = title self.productDescription = productDescription self.productBrand = productBrand self.price = price def __repr__(self): return '' % self.id db.create_all() class ProductSchema(ModelSchema): class Meta(ModelSchema.Meta): model = Product sqla_session = db.session id = fields.Number(dump_only=True) title = fields.String(required=True) productDescription = fields.String(required=True) productBrand = fields.String(required=True) price = fields.Number(required=True) @app.route('/products', methods = ['GET']) def index(): get_products = Product.query.all() product_schema = ProductSchema(many=True) products = product_schema.dump(get_products) return make_response(jsonify({"product": products})) @app.route('/products/<id>', methods = ['GET']) def get_product_by_id(id): get_product = Product.query.get(id) product_schema = ProductSchema() product = product_schema.dump(get_product) return make_response(jsonify({"product": product})) @app.route('/products/<id>', methods = ['PUT']) def update_product_by_id(id): data = request.get_json() get_product = Product.query.get(id) if data.get('title'): get_product.title = data['title'] if data.get('productDescription'): get_product.productDescription = data['productDescription'] if data.get('productBrand'): get_product.productBrand = data['productBrand'] if data.get('price'): get_product.price= data['price'] db.session.add(get_product) db.session.commit() product_schema = ProductSchema(only=['id', 'title', 'productDescription','productBrand','price']) product = product_schema.dump(get_product) return make_response(jsonify({"product": product})) @app.route('/products/<id>', methods = ['DELETE']) def delete_product_by_id(id): get_product = Product.query.get(id) db.session.delete(get_product) db.session.commit() return make_response("",204) @app.route('/products', methods = ['POST']) def create_product(): data = request.get_json() product_schema = ProductSchema() product = product_schema.load(data) result = product_schema.dump(product.create()) return make_response(jsonify({"product": result}),200) if __name__ == "__main__": app.run(debug=True)
3. testing the API
(venv) (base) ubuntu@ubunu2004:~/flaskdbexample$ flask run –host=0.0.0.0
A. POST data to http://ubunu2004:5000/products
{
“title” : “Python coding”,
“productDescription” : “ebook”,
“productBrand” : “SUN”,
“price” : “5000”
}
B. GET data