Flask-SQLAlchemy-Rest

Easily generate rest api with Flask-SQLAlchemy


License
MIT
Install
pip install Flask-SQLAlchemy-Rest==0.1.11

Documentation

Flask-SQLAlchemy-Rest

Flask-SQLAlchemy-Rest is an extension for Flask that can easily generate rest api with Flask-SQLAlchemy.

Installing

$ pip install flask_sqlalchemy_rest

Example

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_sqlalchemy_rest import Rest

app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///example.sqlite"
db = SQLAlchemy(app)
rest = Rest(app, db)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String)
    email = db.Column(db.String)

with app.app_context():
    db.create_all()

rest.add_model(User)

With the above application you can visit the following APIs:

[GET]    http://127.0.0.1:5000/api/user
[POST]   http://127.0.0.1:5000/api/user
[GET]    http://127.0.0.1:5000/api/user/<id>
[PUT]    http://127.0.0.1:5000/api/user/<id>
[DELETE] http://127.0.0.1:5000/api/user/<id>

And you can add params in GET url:

[GET] http://127.0.0.1:5000/api/user?_page=1&_page_size=10&email:eq=xxx 

_page and _page_size are both Built Params
email is column name of User
eq is an Operator

Documentation

Built Params

_page page index, default 1
_page_size number of pages, default 10
_sort column name to sort
_desc if 1, will sort in descending order, default 0
_serach query text in columns that configured search_columns

Operator

eq equal
ne not equal
gt greter than
ge greter equal
lt less than
le less equal
in in a list, split with ','
ni not in a list , split with ','
ct contains string
nc not contains string
sw start with string
ew end with string

Class Rest

  def __init__(app=None, db=None, url_prefix='/api', auth_decorator=None, max_page_size=100)
    app: Flask application instance
    db: Flask-SQLAlchemy instance
    url_prefix: Base url path for apis
    auth_decorator: Decorator function for authentication
    max_page_size: max page size in GET api

  def add_model(model, url_name=None, methods=['GET', 'POST', 'PUT', 'DELETE'], ignore_columns=[], json_columns=[], search_columns=[])
    model: SQLAlchemy.Model object
    url_name: Will be displayed in url
    methods: Allowed HTTP methods. Only GET,POST,PUT,DELETE are allowed
    ignore_columns: Ignored columns in GET api
    json_columns: Columns to be parsed into JSON format
    search_columns: Columns can query with _serach param in GET api