2011-09-15 52 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))