python - 判断一条sql语句是否以单词SELECT开头
问题描述
我正在尝试对输入 SQL 字符串进行一些基本验证。我想确保查询的第一个单词是SELECT
,否则我会引发错误。这里有些例子:
1) yes
SELECT * FROM table
2) no
# SELECT * FROM table;
DROP TABLE table;
3) no
/* SELECT * FROM
TABLE */ DROP TABLE table;
4) yes
# here is a comment
SELECT * FROM table
5) yes
/* here is a
comment */ SELECT * FROM table
和其他各种。也许这更像是一个正则表达式解决方案或 string.replace。但是,查看是否已输入 SQL SELECT 语句的好方法是什么?
解决方案
虽然可以使用正则表达式和其他基于文本的技巧,但正确的 SQL 解析器(例如https://pypi.org/project/sqlparse/)是可行的方法。例如:
import sqlparse
statements = sqlparse.parse(my_evil_sql)
for statement in statements:
if statement.get_type() != "SELECT":
raise Exception("Non-select statement encountered!")
请注意,get_type()
忽略语句开头的空格和注释。
推荐阅读
- python - 如何使用python更改搅拌机中对象的属性
- swift - 当我做一个完整的圆圈时,节点的方向是错误的
- javascript - 通过容器传递函数以导出状态
- jquery - 使用 jQuery 附加永久代码行
- arrays - 使用 Fortran IF 构造查找两个数组之间的匹配值
- android - 应用程序被杀死时的 FCM 通知
- sql - SQL 在创建数据库应用程序中的作用是什么
- python - 将 Python 作为 Windows 服务运行 - 使用模块调用另一个 Python 脚本
- php - mysql使用触发器更新另一个表
- ruby-on-rails - Ransack 中关联模型的访问属性