Adds asynchronous Tortoise ORM support for flask app.
Project description
Flask-Tortoise
Flask-Tortoise is an extension for Flask that adds support for asynchronous Tortoise-ORM to your application with in-built migration system. It aims to simplify using Tortoise-ORM with Flask by providing useful defaults and extra helpers that make it easier to accomplish common tasks.
Tortoise-ORM is one of the best tool to interact with the database asynchronously. It's clean and Django type implementation provides you a better view and understanding of the database ORM system. Also you can use the Pydantic data module to write the error-less code.
The main aim of Tortoise-ORM is to provide the same service and api like the Django-ORM.
Installing
Install and update from PYPI:
pip install -U Flask-Tortoise
Install from source code:
git clone https://github.com/marktennyson/Flask-Tortoise
cd Flask-Tortoise && pip install .
Important links
Github Link: https://github.com/marktennyson/Flask-Tortoise
Official Documentation: https://marktennyson.github.io/Flask-Tortoise
Simple Examples for better understanding:
from flask import Flask, jsonify
from flask_tortoise import Tortoise
from random import choice
STATUSES = ["New", "Old", "Gone"]
app:"Flask" = Flask(__name__)
app.config['TORTOISE_ORM_DATABASE_URI'] = 'sqlite://db.sqlite3'
db:"Tortoise" = Tortoise(app)
class Users(db.Model):
id = db.IntField(pk=True)
status = db.CharField(20)
def __str__(self):
return f"User {self.id}: {self.status}"
class Workers(db.Model):
id = db.IntField(pk=True)
status = db.CharField(20)
def __str__(self):
return f"Worker {self.id}: {self.status}"
@app.get("/")
async def list_all():
users = await Users.all()
workers = await Workers.all()
return jsonify(
{"users": [str(user) for user in users], "workers": [str(worker) for worker in workers]}
)
@app.get("/user")
async def add_user():
user = await Users.create(status=choice(STATUSES)) # nosec
return str(user)
@app.get("/worker")
async def add_worker():
worker = await Workers.create(status=choice(STATUSES)) # nosec
return str(worker)
@app.get("/get-worker")
async def get_worker():
worker:"Workers" = await Workers.get(id=1)
return str(worker.status)
if __name__ == '__main__':
app.run(debug=True, port=8080)
If you save your models into a separate file than you have mention the file name on app config:
let's assume you have stores all of your models at models.py
file.
models.py file
from flask_tortoise import Tortoise, Model, fields
db:"Tortoise" = Tortoise()
class Users(db.Model):
id = db.IntField(pk=True)
status = db.CharField(20)
def __str__(self):
return f"User {self.id}: {self.status}"
class Workers(db.Model):
id = db.IntField(pk=True)
status = db.CharField(20)
def __str__(self):
return f"Worker {self.id}: {self.status}"
app.py file:
from flask import Flask, jsonify
from models import *
from random import choice
STATUSES = ["New", "Old", "Gone"]
app:"Flask" = Flask(__name__)
app.config['TORTOISE_ORM_DATABASE_URI'] = 'sqlite://db.sqlite3'
app.config['TORTOISE_ORM_MODELS'] = "models" # if you have more than one models file then : ["models_1", "models_2", "models_3"]
db.init_app(app)
@app.get("/")
async def list_all():
users = await Users.all()
workers = await Workers.all()
return jsonify(
{"users": [str(user) for user in users], "workers": [str(worker) for worker in workers]}
)
@app.get("/user")
async def add_user():
user = await Users.create(status=choice(STATUSES)) # nosec
return str(user)
@app.get("/worker")
async def add_worker():
worker = await Workers.create(status=choice(STATUSES)) # nosec
return str(worker)
@app.get("/get-worker")
async def get_worker():
worker:"Workers" = await Workers.get(id=1)
return str(worker.status)
if __name__ == '__main__':
app.run(debug=True, port=8080)
Contributing:
We welcome all types of contributions. If you face any issue while using this module then please let us know by creating a github issue on the official github repo. If you have the solution for the issue raised by you or somebody else then please fork this repo and create a pull request with the main branch.
How to run this project on local machine:
- Fork this repo.
- Clone this repo on your local machine.
- create a virtual environment using python
virtualenv
module and activate it. - now run
python setup.py install
. - the above command will install the latest dev version of
Flask-Tortoise
on the virtual environment.
Contributor List:
License
GNU General Public License v3 or later (GPLv3+)
Copyright (c) 2021 Aniket Sarkar(aniketsarkar@yahoo.com)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file Flask-Tortoise-0.0.2.tar.gz
.
File metadata
- Download URL: Flask-Tortoise-0.0.2.tar.gz
- Upload date:
- Size: 28.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.4.2 requests/2.25.1 setuptools/45.2.0 requests-toolbelt/0.8.0 tqdm/4.61.1 CPython/3.8.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | dd87d2990485fabaeb24d88284c765fbff7838f11f131cc03a8c10e49c32a8f5 |
|
MD5 | 01c9e89bf83b31c3e6198345b7fc0552 |
|
BLAKE2b-256 | 22c5b05ea1ae9ff5b1392c5cd0f0d1b79c04e7cabc77bf67b940d6bb71580f90 |
File details
Details for the file Flask_Tortoise-0.0.2-py3-none-any.whl
.
File metadata
- Download URL: Flask_Tortoise-0.0.2-py3-none-any.whl
- Upload date:
- Size: 27.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.4.2 requests/2.25.1 setuptools/45.2.0 requests-toolbelt/0.8.0 tqdm/4.61.1 CPython/3.8.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1df4540761a5c9531481d8e0220f9117feee6548e341b7bbd6b30e43d1934bfe |
|
MD5 | 8701b090b4cc89f7b0a4d3f4963c1b85 |
|
BLAKE2b-256 | c7b979dfb6a8a19511dbe32bbf782678c5254ff8cff8d6bbda631f951986bc1f |