Bottle SQLAlchemy plugin

iurisilvio iurisilvio Last update: Sep 23, 2022

This bottle-sqlalchemy plugin integrates SQLAlchemy with your Bottleapplication. It injects a SQLAlchemy session in your route and handle the session cycle.

Usage Example:

import bottlefrom bottle import HTTPErrorfrom bottle.ext import sqlalchemyfrom sqlalchemy import create_engine, Column, Integer, Sequence, Stringfrom sqlalchemy.ext.declarative import declarative_baseBase = declarative_base()engine = create_engine('sqlite:///:memory:', echo=True)app = bottle.Bottle()plugin = sqlalchemy.Plugin(    engine, # SQLAlchemy engine created with create_engine function.    Base.metadata, # SQLAlchemy metadata, required only if create=True.    keyword='db', # Keyword used to inject session database in a route (default 'db').    create=True, # If it is true, execute `metadata.create_all(engine)` when plugin is applied (default False).    commit=True, # If it is true, plugin commit changes after route is executed (default True).    use_kwargs=False # If it is true and keyword is not defined, plugin uses **kwargs argument to inject session database (default False).)app.install(plugin)class Entity(Base):    __tablename__ = 'entity'    id = Column(Integer, Sequence('id_seq'), primary_key=True)    name = Column(String(50))    def __init__(self, name):        self.name = name    def __repr__(self):        return "<Entity('%d', '%s')>" % (self.id, self.name)@app.get('/:name')def show(name, db):    entity = db.query(Entity).filter_by(name=name).first()    if entity:        return {'id': entity.id, 'name': entity.name}    return HTTPError(404, 'Entity not found.')@app.put('/:name')def put_name(name, db):    entity = Entity(name)    db.add(entity)@app.get('/spam/:eggs', sqlalchemy=dict(use_kwargs=True))@bottle.view('some_view')def route_with_view(eggs, db):    # do something useful here

It is up to you create engine and metadata, because SQLAlchemy hasa lot of options to do it. The plugin just handle the SQLAlchemysession.

Subscribe to our newsletter