SQLAlchemy dependency for nameko services
Project description
A SQLAlchemy dependency for nameko, enabling services to interface with a relational database.
Usage
from nameko_sqlalchemy import Session
from .models import Model, DeclarativeBase
class Service(object):
session = Session(DeclarativeBase)
@entrypoint
def write_to_db(self):
model = Model(...)
self.session.add(model)
self.session.commit()
@entrypoint
def query_db(self):
queryset = self.session.query(Model).filter(...)
...
Database drivers
You may use any database driver compatible with SQLAlchemy provided it is safe to use with eventlet. This will include all pure-python drivers. Known safe drivers are:
Pytest fixtures
Pytest fixtures to allow for easy testing are available.
db_session fixture (which depends on db_connection fixture) will instantiate test database and tear it down at the end of each test.
model_base fixture can be overridden to provide custom declarative_base
import pytest
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
class Base(object):
pass
DeclarativeBase = declarative_base(cls=Base)
class User(DeclarativeBase):
__tablename__ = "users"
id = Column(Integer, primary_key=True)
name = Column(String)
@pytest.fixture(scope='session')
def model_base():
return DeclarativeBase
def test_users(db_session):
user = User(id=1, name='Joe')
db_session.add(user)
db_session.commit()
saved_user = db_session.query(User).get(user.id)
assert saved_user.id > 0
assert saved_user.name == 'Joe'
When running tests you can pass database test url with --test-db-url parameter or override db_url fixture. By default SQLite memory database will be used.
py.test test --test-db-url=sqlite:///test_db.sql
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.