SACRUD will solve your problem of CRUD interface for SQLAlchemy. Originally created for pyramid_sacrud , but then in a separate project.
Allows easy manipulation with CRUD operation and support JSON data.
Look how easy it is to use:
CREATE
from .models import DBSession, Groups
from sacrud.action import CRUD
data = {'name': 'Electronics',
'parent_id': '10',}
group_obj = CRUD(DBSession, Groups).create(data)
print(group_obj.name)
If the entry already exists, just add the option update=True
.
from .models import DBSession, Groups
from sacrud.action import CRUD
data = {'id': 6, # existing entry
'name': 'Electronics',
'parent_id': '10',}
group_obj = CRUD(DBSession, Groups).create(data, update=True)
print(group_obj.name)
READ
from .models import DBSession, Groups
from sacrud.action import CRUD
group_obj = CRUD(DBSession, Groups).read()
print(group_obj.name)
UPDATE
from .models import DBSession, Groups
from sacrud.action import CRUD
group_obj = CRUD(DBSession, Groups).update(1, {'name': 'Chemistry'})
print(group_obj.name)
DELETE
from .models import DBSession, Groups
from sacrud.action import CRUD
CRUD(DBSession, Groups).delete(1)
M2M and M2O data
For adding multiple data for m2m or m2o use endinng [], ex.:
from .models import DBSession, Users
from sacrud.action import CRUD
CRUD(DBSession, Users).create(
{'name': 'Vasya', 'sex': 1,
'groups[]': ['["id", 1]', '["id", 2]']}
)
It support composit primary key.
Wraps your SQLAlchemy session
from sqlalchemy.orm import scoped_session, sessionmaker
from sacrud import CRUDSession
Session = scoped_session(sessionmaker(class_=CRUDSession))
DBSession = Session()
DBSession.sacrud(User).delete(1)
Wraps your zope.sqlalchemy session
from sqlalchemy.orm import scoped_session, sessionmaker
from zope.sqlalchemy import ZopeTransactionExtension
from sacrud import crud_sessionmaker
DBSession = crud_sessionmaker(scoped_session(
sessionmaker(extension=ZopeTransactionExtension())))
DBSession.sacrud(User).delete(1)
Now CRUD available from DBSession.
group_obj = DBSession.sacrud(Groups).create(data)
print(group_obj.name)
To report bugs, use the issue tracker.
We welcome any contribution: suggestions, ideas, commits with new futures, bug fixes, refactoring, docs, tests, translations etc
If you know Flask framework, it would be nice create connector to him like pyramid_sacrud.
If you have question, contact me sacrud@uralbash.ru or IRC channel #sacrud