Added defer_except()

This commit is contained in:
Konsta Vesterinen
2013-03-01 16:52:47 +02:00
parent f7219540ce
commit 441364126c
3 changed files with 32 additions and 3 deletions

View File

@@ -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

View File

@@ -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',

View File

@@ -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