首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于pyDAL的多域滤波

基于pyDAL的多域滤波
EN

Stack Overflow用户
提问于 2016-08-08 18:46:09
回答 1查看 423关注 0票数 3

编辑:我想我解决了它,我添加了答案。

我正在使用python、Falcon作为web框架和pyDAL作为MySQL的DAL编写REST。

我希望使用get请求的查询字符串中的字段筛选(where语句)。

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

代码语言:javascript
复制
http://127.0.0.1:5000/users?firstName=FirstN&id=1

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

代码语言:javascript
复制
SELECT * FROM users WHERE firstName = 'FirstN' AND id = '1'

我找不到能够做到这一点的东西,因为pyDAL希望接收以下内容:

代码语言:javascript
复制
self.db((self.db.users.id == 1) & (self.db.users.firstName == 'FirstN')).select()

但我不能指定字段,因为我不知道要筛选哪个字段,这就是我为什么这样写的原因:

代码语言:javascript
复制
def on_get(self, req, resp):
    if req.query_string is not '':
        input = req.query_string
        sql = 'SELECT * FROM users WHERE '
        sql += ' AND '.join(['{col} = \'{value}\''.format(col=item.split('=')[0], value=item.split('=')[1]) for item in input.split('&')])
        resp.body = json.dumps(self.db.executesql(sql, as_dict=True))
    else:
        resp.body = json.dumps(self.db(self.db.users).select().as_dict())

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

EN

回答 1

Stack Overflow用户

发布于 2016-08-08 20:15:46

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

代码语言:javascript
复制
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

比我执行:

代码语言:javascript
复制
self.db(generate_filter(self.db.users, req.query_string)).select().as_dict()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38836394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档