基于pyDAL的多场滤波

2024-06-16 10:59:39 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我正在用python编写restapi, Falcon作为web框架,pyDAL作为MySQL的DAL。在

我想使用在get请求的查询字符串中获取的字段筛选(where语句)。在

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

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

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

^{pr2}$

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

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

但我不能指定字段,因为我不知道要在哪个字段上进行筛选,所以我写了以下内容:

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())

但我觉得很糟糕,应该是个更好的理由。在


Tags: selfiddbsqlgetfirstnameitemquery
1条回答
网友
1楼 · 发布于 2024-06-16 10:59:39

我创建了一个函数,它接收表对象和查询字符串,并执行以下操作:

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

比我执行:

^{pr2}$

相关问题 更多 >