我正在用Django和DjangoRestFramework为我学校的内部应用程序编写一个web应用程序。它是微软access2003中一个非常古老的国产应用程序的替代品。我的用户非常希望拥有的功能之一是能够搜索一个字段(例如donation_amount
在donation
表中),不仅可以搜索确切的数量,还可以使用如下查询:
< 130 and > 125
Access目前允许这种功能,而且非常有用,但是我完全不知道有什么方法可以实现这样的功能,而不直接将查询插入SQL(非常危险)或在Python表达式中使用eval
(甚至更危险)。你知道吗
有没有允许这样做的库或子语言?你知道吗
我不熟悉Django的生态系统,但是Python标准库包含
ast.parse
,它解析一个有效的Python表达式字符串并生成一个抽象语法树,您可以解析并转换为一个查询或一系列函数调用,或者任何您需要的东西。所以如果你找不到更具体的东西,那么这个可能有用。你知道吗此代码:
返回以下AST结构:
这样就可以进行解析了,但是您仍然需要将其转换为自己的查询。但看起来您只需要处理少量节点类型:
如果您想支持数据库功能,可以使用
ast.Call
节点;如果您想支持IN
功能,可以使用ast.Tuple
或ast.List
节点。如果AST包含任何其他节点类型,则可以将其作为无效查询拒绝。你知道吗您是否使用Django ORM对数据库进行建模?如果是这样的话,那就不能归结为:
相关问题 更多 >
编程相关推荐