编辑:我想我解决了,我添加了答案。
我正在使用 python 编写一个 REST API,Falcon 作为 Web 框架,pyDAL 作为 MySQL 的 DAL。
我想使用在获取请求的查询字符串中获得的字段进行过滤(where 语句)。
例如,我收到以下获取请求:
http://127.0.0.1:5000/users?firstName=FirstN&id=1
我希望 pyDAL 将查询生成以下 SQL:
SELECT * FROM users WHERE firstName = 'FirstN' AND id = '1'
我找不到可以做到这一点的东西,因为 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())
但我认为这很糟糕,应该是一个更好的原因。