如何将字符串形式的Python条件语句转换为SQL条件语句
Python条件字符串转SQL条件字符串方案
如果你的输入是规则简单的Python条件表达式(仅包含基础比较、布尔逻辑、空值判断,无复杂语法、嵌套函数),不需要引入重型依赖,基于规则替换就能快速实现需求,核心是优先匹配长运算符、用单词边界避免误替换标识符内容。
基础替换规则
按匹配优先级从高到低排列(长规则在前,避免短规则提前匹配破坏长语法):
is not None→IS NOT NULLis None→IS NULL!=→<>- 逻辑关键字
and/or/not→ 全大写的AND/OR/NOT - 布尔值
True/False→ 全大写的TRUE/FALSE
最简实现代码
import re def py_condition_to_sql(py_cond: str) -> str: rule_list = [ (r"\bis not None\b", "IS NOT NULL"), (r"\bis None\b", "IS NULL"), (r"!=", "<>"), (r"\band\b", "AND"), (r"\bor\b", "OR"), (r"\bnot\b", "NOT"), (r"\bTrue\b", "TRUE"), (r"\bFalse\b", "FALSE"), ] sql_cond = py_cond for pattern, target in rule_list: sql_cond = re.sub(pattern, target, sql_cond) return sql_cond
测试示例:
print(py_condition_to_sql("variable1 != 0")) # 输出:variable1 <> 0
注意事项
- 上述实现用
\b单词边界做匹配,不会把标识符里的关键字片段误替换,比如变量名and_flag不会被错误替换为AND_flag - 如果你的输入场景包含更复杂的Python语法,比如链式比较
a < b < c、成员判断x in [1,2,3]、字符串字面量里包含运算符/关键字、自定义函数调用,简单正则替换会出现误判,此时建议用Python标准库ast解析条件字符串为抽象语法树,遍历节点映射生成SQL语法,鲁棒性更强 - 安全提示:转换后的条件字符串不要直接拼接到SQL语句中执行,必须做语法校验,使用参数绑定传值,避免SQL注入风险
内容的提问来源于stack exchange,提问作者lordbjl
相关产品推荐
相关产品推荐

