Flask-SQLAlchemy-Rest is an extension for Flask that can easily generate rest api with Flask-SQLAlchemy.
$ pip install flask_sqlalchemy_rest
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
_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
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
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