Skip to content

Async support for a range of databases for Muffin Framework

License

Notifications You must be signed in to change notification settings

klen/muffin-databases

Repository files navigation

Muffin-Databases

Muffin-Databases -- Async support for a range of databases for Muffin Framework

Tests Status

PYPI Version

Python Versions

Requirements

  • python >= 3.7

Note

The plugin supports only asyncio evenloop (not trio)

Installation

Muffin-Databases should be installed using pip: :

$ pip install muffin-databases

Optionally you can install the required database drivers with: :

$ pip install muffin-databases[sqlite]
$ pip install muffin-databases[postgres]
$ pip install muffin-databases[mysql]

Driver support is provided using one of asyncpg, aiomysql, or aiosqlite.

Usage

Setup the plugin and connect it into your app:

from muffin import Application
from muffin_databases import Plugin as DB

# Create Muffin Application
app = Application('example')

# Initialize the plugin
# As alternative: db = DB(app, **options)
db = DB(url='sqlite:///db.sqlite')
db.setup(app)

That's it now you are able to use the plugin inside your views:

@app.route('/items', methods=['GET'])
async def get_items(request):
    """Return a JSON with items from database."""
    rows = await db.fetch_all('SELECT * from items')
    return [dict(row.items()) for row in rows]

@app.route('/items', methods=['POST'])
async def insert_item(request):
    """Store an item into database."""
    data = await request.data()  # parse formdata/json from the request
    await db.execute_many('INSERT INTO items (name, value) VALUES (:name, :value)', values=data)
    return 'OK'

The Muffin-Databases plugin is based on databases. See the databases's docs for further references.

Options

Name Default value Desctiption
url "sqlite:///db.sqlite" A database connection URL
params {} A database connection params

You are able to provide the options when you are initiliazing the plugin:

db.setup(app, url='postgresql://localhost/example', params={'ssl': True, 'min_size': 5, 'max_size': 20})

Or setup it from Muffin.Application configuration using the DATABASES_ prefix:

DATABASES_URL = 'postgresql://localhost/example'

Muffin.Application configuration options are case insensitive

Bug tracker

If you have any suggestions, bug reports or annoyances please report them to the issue tracker at https://github.com/klen/muffin-databases/issues

Contributing

Development of Muffin-Databases happens at: https://github.com/klen/muffin-databases

Contributors

  • klen (Kirill Klenov)

License

Licensed under a MIT license.

About

Async support for a range of databases for Muffin Framework

Topics

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Packages

No packages published