Skip to main content

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:
  1. Fork this repo.
  2. Clone this repo on your local machine.
  3. create a virtual environment using python virtualenv module and activate it.
  4. now run python setup.py install.
  5. 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

Flask-Tortoise-0.0.2.tar.gz (28.2 kB view details)

Uploaded Source

Built Distribution

Flask_Tortoise-0.0.2-py3-none-any.whl (27.2 kB view details)

Uploaded Python 3

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

Hashes for Flask-Tortoise-0.0.2.tar.gz
Algorithm Hash digest
SHA256 dd87d2990485fabaeb24d88284c765fbff7838f11f131cc03a8c10e49c32a8f5
MD5 01c9e89bf83b31c3e6198345b7fc0552
BLAKE2b-256 22c5b05ea1ae9ff5b1392c5cd0f0d1b79c04e7cabc77bf67b940d6bb71580f90

See more details on using hashes here.

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

Hashes for Flask_Tortoise-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 1df4540761a5c9531481d8e0220f9117feee6548e341b7bbd6b30e43d1934bfe
MD5 8701b090b4cc89f7b0a4d3f4963c1b85
BLAKE2b-256 c7b979dfb6a8a19511dbe32bbf782678c5254ff8cff8d6bbda631f951986bc1f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page