Added defer_except()
This commit is contained in:
10
CHANGES.rst
10
CHANGES.rst
@@ -4,7 +4,13 @@ Changelog
|
|||||||
Here you can see the full list of changes between each SQLAlchemy-Utils release.
|
Here you can see the full list of changes between each SQLAlchemy-Utils release.
|
||||||
|
|
||||||
|
|
||||||
0.1.0 (12.1.2013)
|
0.2.0 (2013-03-01)
|
||||||
^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
- Added new function defer_except()
|
||||||
|
|
||||||
|
|
||||||
|
0.1.0 (2013-01-12)
|
||||||
|
^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
- Initial public release
|
- Initial public release
|
||||||
|
2
setup.py
2
setup.py
@@ -24,7 +24,7 @@ class PyTest(Command):
|
|||||||
|
|
||||||
setup(
|
setup(
|
||||||
name='SQLAlchemy-Utils',
|
name='SQLAlchemy-Utils',
|
||||||
version='0.1',
|
version='0.2',
|
||||||
url='https://github.com/kvesteri/sqlalchemy-utils',
|
url='https://github.com/kvesteri/sqlalchemy-utils',
|
||||||
license='BSD',
|
license='BSD',
|
||||||
author='Konsta Vesterinen',
|
author='Konsta Vesterinen',
|
||||||
|
@@ -1,5 +1,7 @@
|
|||||||
|
from sqlalchemy.orm import defer
|
||||||
from sqlalchemy.orm.mapper import Mapper
|
from sqlalchemy.orm.mapper import Mapper
|
||||||
from sqlalchemy.orm.query import _ColumnEntity
|
from sqlalchemy.orm.query import _ColumnEntity
|
||||||
|
from sqlalchemy.orm.properties import ColumnProperty
|
||||||
from sqlalchemy.sql.expression import desc, asc
|
from sqlalchemy.sql.expression import desc, asc
|
||||||
|
|
||||||
|
|
||||||
@@ -113,6 +115,27 @@ def sort_query(query, sort):
|
|||||||
return query
|
return query
|
||||||
|
|
||||||
|
|
||||||
|
def defer_except(query, columns):
|
||||||
|
"""
|
||||||
|
Deferred loads all columns in given query, except the ones given.
|
||||||
|
|
||||||
|
>>> from sqlalchemy_utils import defer_except
|
||||||
|
>>> query = session.query(User)
|
||||||
|
>>> query = defer_except(User, [User.id, User.name])
|
||||||
|
|
||||||
|
:param columns: columns not to deferred load
|
||||||
|
"""
|
||||||
|
model = query._entities[0].entity_zero.class_
|
||||||
|
fields = set(model._sa_class_manager.values())
|
||||||
|
for field in fields:
|
||||||
|
property_ = field.property
|
||||||
|
if isinstance(property_, ColumnProperty):
|
||||||
|
column = property_.columns[0]
|
||||||
|
if column.name not in columns:
|
||||||
|
query = query.options(defer(property_.key))
|
||||||
|
return query
|
||||||
|
|
||||||
|
|
||||||
def escape_like(string, escape_char='*'):
|
def escape_like(string, escape_char='*'):
|
||||||
"""
|
"""
|
||||||
Escapes the string paremeter used in SQL LIKE expressions
|
Escapes the string paremeter used in SQL LIKE expressions
|
||||||
|
Reference in New Issue
Block a user