Advanced usage¶
Using with SQLAlchemy¶
Firstly, create a schema:
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
engine = create_engine('sqlite://:memory:')
Base = declarative_base()
class Person(Base):
id = Column(Integer, primary_key=True)
name = Column(String(255))
Base.metadata.create_all(engine)
DBSession = sessionmaker(bind=engine)
session = DBSession()
Then:
from schemapy import API, Field
# disable actions generation from PyDAL (you can feed your own generator)
api = API(db, schema_actions_generator=None)
@api.as_action(
type='read',
request=[Field('name', type='string', required=True)],
response=[
Field('id', type='integer'),
Field('name', type='string')
]
)
def select_persons_by_name(db, req, action):
return [
{'id': person.id, 'name': person.name}
for person in db.query(Person).filter(Person.name == req.name).all()
]