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)
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)
CREATE, READ, DELETE, UPDATE actions for SQLAlchemy models
sacrud.action.
CRUD
(session, table, preprocessing=<class 'sacrud.preprocessing.ObjPreprocessing'>, commit=True)[source]¶Bases: object
Main class for CRUD actions
Parameters: |
|
---|
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
.
SQLAlchemy helpers
sacrud.common.
ClassProperty
(func)[source]¶Bases: sacrud.common.TableProperty
sacrud.common.
get_attrname_by_colname
(instance, name)[source]¶Get value from SQLAlchemy instance by column name
Parameters: |
|
---|---|
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_pk
(obj)[source]¶Return primary key name by model class or instance.
Parameters: |
|
---|---|
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),)
Preprocessing