【发布时间】:2021-11-15 11:00:12
【问题描述】:
我正在学习如何使用 SQL Alchemy,我正在尝试重新实现以前定义的 API,但现在使用的是 Python。
REST API 具有以下查询参数:
myService/v1/data?range=time:2015-08-01:2015-08-02
所以我想映射 field:FROM:TO 之类的东西来过滤一系列结果,例如日期范围。
这是我目前正在使用的:
rangeStatement = range.split(':')
if(len(rangeStatement)==3):
query = query.filter(text('{} BETWEEN "{}" AND "{}"'.format(*rangeStatement)))
因此,这将产生以下 WHERE 条件:
WHERE time BETWEEN "2015-08-01" AND "2015-08-02"
我知道 SQL Alchemy 是一个强大的工具,它允许创建像 Query.filter_by(MyClass.temp) 这样的查询,但我需要 API 请求尽可能开放。
所以,我担心有人会在range 参数中传递类似DROP TABLE 的内容并利用text 函数
【问题讨论】:
-
如果您正在使用字符串格式构建查询,那么损坏已经造成。使用占位符和
bindparams。 -
这是一个学习项目,我对数据访问层的 Java 和 Spring 框架太习惯了,我正在尝试找出如何在 Python 中做同样的事情(不依赖 Django 和Django 框架),所以,我可以更改查询。我不想改变的是 API Spec
标签: python python-3.x sqlalchemy