我想应用一些访问规则类型的机制,因为我计划使用元组列表来指定限制规则,如下所示
['|',('name','=','root'), ('role','=','admin')]
使用后缀符号...
python中是否有任何现有的机制可以帮助我将这样的域转换为sqlalchemy查询lang,如
or_(User.name='root', User.role='admin')
答案 0 :(得分:2)
这是一个开头:
我将用前缀表示法重写你的表达;运算符是第一个,其他值遵循,所以:
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))