2011-09-15 33 views
0

我想申请机构的一些访问规则类型,我打算使用元组的列表,用于限制指定以下
['|',('name','=','root'), ('role','=','admin')]使用后缀符号,如规则...sqlalchemy基于元组列表的评估标准,搜索?

有任何现有机制蟒蛇,可以帮助我这样的域名转换为SQLAlchemy的查询郎像

or_(User.name='root', User.role='admin')

+0

没有,但你可以建立一个。最近的相关问题请参阅http://stackoverflow.com/questions/7411812/how-to-create-literal-based-query-in-sqlalchemy。 – van

回答

2

这里有一个的开始:

我要重写你的EXPRES用前缀符号表示;操作员是第一,其他值遵循,所以:

test_expression = ['|',('=','name','root'), ('=','role','admin')] 

但是,你很可能添加一些运营商特定的检查处理在其他地方运营商。

def buildquery(context, expression): 
    OPERATORS[expression[0]](context, expression[1:]) 

def build_or(context, args): 
    return sqlalchemy.or_(*(buildquery(context, arg) for arg in args)) 

def build_eq(context, args): 
    colname, value = args 
    return getattr(context, colname) == value 

OPERATORS = { 
    '|': build_or, 
    '=': build_eq} 

,并使用它,通过你想要使用的查询与被映射的类:

session.query(User).filter(build_query(User, test_expression))