API

sacrud

sacrud.crud_sessionmaker(session)[source]

Wraps zope.sqlalchemy session adding there sacrud method.

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)
class sacrud.CRUDSession(bind=None, autoflush=True, expire_on_commit=True, _enable_transaction_accounting=True, autocommit=False, twophase=False, weak_identity_map=True, binds=None, extension=None, info=None, query_cls=<class 'sqlalchemy.orm.query.Query'>)[source]

Bases: sqlalchemy.orm.session.Session

Wraps SQLAlchemy session adding there sacrud method.

from sqlalchemy.orm import scoped_session, sessionmaker
from sacrud import CRUDSession

Session = scoped_session(sessionmaker(class_=CRUDSession))
session = Session()
DBSession.sacrud(User).delete(1)
sacrud(cls, *args, **kwargs)[source]

sacrud.action

CREATE, READ, DELETE, UPDATE actions for SQLAlchemy models

class sacrud.action.CRUD(session, table, preprocessing=<class 'sacrud.preprocessing.ObjPreprocessing'>, commit=True)[source]

Bases: object

Main class for CRUD actions

Parameters:
  • session: SQLAlchemy DBSession
  • table: SQLAlchemy model
  • commit: To do or not after modify object
  • preprocessing: you custom preprocessing class
create(data, update=False, **kwargs)[source]

Creates a new object pretreated input data.

DBSession.sacrud(Users).create({'name': 'Vasya', 'sex': 1})

Support JSON:

DBSession.sacrud(Users).create('{"name": "Vasya", "sex": 1}')

For adding multiple data for m2m or m2o use endinng [], ex.:

DBSession.sacrud(Users).create(
    {'name': 'Vasya', 'sex': 1,
     'groups[]': ['["id", 1]', '["id", 2]']}
)
delete(pk, **kwargs)[source]

Delete the object by primary_key:

DBSession.sacrud(Users).delete(1)
DBSession.sacrud(Users).delete('1')
DBSession.sacrud(User2Groups).delete({'user_id': 4, 'group_id': 2})

JSON support:

DBSession.sacrud(User2Groups).delete(
    '{"user_id": 4, "group_id": 2}'
)

Default it run session.commit() or transaction.commit(). If it is not necessary use attribute commit=False.

read(*pk)[source]

Return a list of entries in the table or single entry if there is an pk.

# All users
DBSession.sacrud(Users).read()

# Composite primary_key
DBSession.sacrud(User2Groups).read({'user_id': 4, 'group_id': 2})

# Multiple rows
primary_keys = [
    {'user_id': 4, 'group_id': 2},
    {'user_id': 4, 'group_id': 3},
    {'user_id': 1, 'group_id': 1},
    {'user_id': 19, 'group_id': 2}
]
DBSession.sacrud(User2Groups).read(*primary_keys)

# JSON using
primary_keys = '''[
    {"user_id": 4, "group_id": 2},
    {"user_id": 4, "group_id": 3},
    {"user_id": 1, "group_id": 1},
    {"user_id": 19, "group_id": 2}
]'''
DBSession.sacrud(User2Groups).read(primary_keys)

# Delete
DBSession.sacrud(User2Groups).read(*primary_keys)                .delete(synchronize_session=False)

# Same, but work with only not composite primary key
DBSession.sacrud(Users).read((5, 10))       # as list
DBSession.sacrud(Users).read('[5, 10]')     # as JSON
DBSession.sacrud(Users).read('{"id": 5}')   # as JSON explicit pk
DBSession.sacrud(Users).read(5, "1", 2)     # as *args
DBSession.sacrud(Users).read(42)            # single
update(pk, data, **kwargs)[source]

Updates the object by primary_key:

DBSession.sacrud(Users).update(1, {'name': 'Petya'})
DBSession.sacrud(Users).update('1', {'name': 'Petya'})
DBSession.sacrud(User2Groups).update({'user_id': 4, 'group_id': 2},
                                     {'group_id': 1})

JSON support:

DBSession.sacrud(Users).update(1, '{"name": "Petya"}')
DBSession.sacrud(User2Groups).update(
    '{"user_id": 4, "group_id": 2}',    # primary_key
    '{"group_id": 1}'                   # data
)

Default it run session.commit() or transaction.commit(). If it is not necessary use attribute commit=False.

sacrud.common

SQLAlchemy helpers

class sacrud.common.ClassProperty(func)[source]

Bases: sacrud.common.TableProperty

class sacrud.common.TableProperty(func)[source]

Bases: object

sacrud.common.columns_by_group(table)[source]
sacrud.common.get_attrname_by_colname(instance, name)[source]

Get value from SQLAlchemy instance by column name

Parameters:
  • instance: SQLAlchemy model instance.
  • name: Column name
Examples:
>>> from sqlalchemy import Column, Integer
>>> from sqlalchemy.ext.declarative import declarative_base
>>> Base = declarative_base()
>>> class MPTTPages(Base):
...     __tablename__ = "mptt_pages"
...     id = Column(Integer, primary_key=True)
...     left = Column("lft", Integer, nullable=False)
>>> get_attrname_by_colname(MPTTPages(), 'lft')
'left'
sacrud.common.get_columns(obj)[source]
sacrud.common.get_empty_instance(table)[source]

Return empty instance of model.

sacrud.common.get_flat_columns(table)[source]
sacrud.common.get_obj(session, table, pk)[source]
sacrud.common.get_obj_by_request_data(session, table, data)[source]
sacrud.common.get_pk(obj)[source]

Return primary key name by model class or instance.

Parameters:
  • obj: SQLAlchemy model instance or class.
Examples:
>>> from sqlalchemy import Column, Integer
>>> from sqlalchemy.ext.declarative import declarative_base
>>> Base = declarative_base()
>>> class User(Base):
...     __tablename__ = 'users'
...     id = Column(Integer, primary_key=True)
>>> get_pk(User())
(Column('id', Integer(), table=<users>, primary_key=True, nullable=False),)
>>> get_pk(User)
(Column('id', Integer(), table=<users>, primary_key=True, nullable=False),)
sacrud.common.get_relationship(table)[source]
sacrud.common.pk_list_to_dict(pk_list)[source]

convert list of multi pk to dict

[‘id’, 1, ‘id2’, 22, ‘foo’, ‘bar’] -> {‘foo’: ‘bar’, ‘id2’: 22, ‘id’: 1}

sacrud.common.pk_to_dict(obj)[source]
sacrud.common.pk_to_list(obj, as_json=False)[source]
sacrud.common.unjson(obj)[source]

sacrud.exttype

sacrud.preprocessing

Preprocessing

class sacrud.preprocessing.ObjPreprocessing(obj)[source]

Bases: object

add(session, data, table)[source]
delete()[source]
class sacrud.preprocessing.RequestPreprocessing(request)[source]

Bases: object

check_type(table, key)[source]
sacrud.preprocessing.get_m2m_objs(session, relation, id_from_request)[source]
sacrud.preprocessing.get_m2m_value(session, request, obj)[source]

Set m2m value for model obj from request params like “group[]”

Parameters:
  • session: SQLAlchemy DBSession
  • request: request as dict
  • obj: model instance
sacrud.preprocessing.list_of_lists_to_dict(l)[source]

Convert list of key,value lists to dict

[[‘id’, 1], [‘id’, 2], [‘id’, 3], [‘foo’: 4]] {‘id’: [1, 2, 3], ‘foo’: [4]}

Tests

sacrud.tests

sacrud.tests.test_action

sacrud.tests.test_common

sacrud.tests.test_exttype

sacrud.tests.test_preprocessor

sacrud.tests.test_sessionmaker

  Read the Docs
v: stable  
Versions
latest
stable
master
Free document hosting provided by Read the Docs.