使用pyDAL进行多场过滤

时间:2016-08-08 18:46:09

标签: python pydal

编辑:我想我解决了,我补充了答案。

我正在使用python编写REST API, Falcon作为Web框架,pyDAL作为MySQL的DAL。

我想使用get参数的查询字符串中的字段来过滤(where语句)。

例如,我收到以下get请求:

char c = foo();
#if CHAR_MAX <= INT_MAX
   printf("%d",c);
#else
   printf("%u",c);
#endif

我希望pyDAL将查询生成以下SQL:

http://127.0.0.1:5000/users?firstName=FirstN&id=1

我找不到能做到这一点的东西,因为pyDAL希望得到类似的东西:

SELECT * FROM users WHERE firstName = 'FirstN' AND id = '1'

但我无法指定字段,因为我不知道我要过滤哪个字段,这就是为什么我写这个:

self.db((self.db.users.id == 1) & (self.db.users.firstName == 'FirstN')).select()

但我认为这是可怕的,应该是一个更好的原因。

1 个答案:

答案 0 :(得分:1)

我创建了一个接收Table对象和查询字符串的函数,并执行:

def generate_filter(table, query_string):
    statement = True
    for field in query_string.split('&'):
        field = field.split('=')
        statement &= getattr(table, field[0]) == field[1]
    return statement

比我执行:

self.db(generate_filter(self.db.users, req.query_string)).select().as_dict()