当前位置: 首页 > 面试题库 >

确定sql语句是否以SELECT单词开头

邢俊悟
2023-03-14
问题内容

我正在尝试对输入的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语句的一种好方法是什么?


问题答案:

我将为作业使用适当的工具sqlparse-SQL解析器,获取第一个语句对象,并检查其SELECT类型是否正确:

In [1]: import sqlparse

In [2]: queries = [
   ...:     "SELECT * FROM table",
   ...:     """
   ...:     # SELECT * FROM table;
   ...:     DROP TABLE table;
   ...:     """,
   ...:     """/* SELECT * FROM 
   ...:    TABLE /* DROP table table;""",
   ...:    """
   ...:    # here is a comment
   ...:    SELECT * FROM table
   ...:    """
   ...: ]

In [3]: def is_select(query):
             first_statement = next((token for token in sqlparse.parse(query) if isinstance(token, sqlparse.sql.Statement)), None) 
             if first_statement:
                 return first_statement.get_type() == 'SELECT'

In [4]: for query in queries:
    ...:     print(query, is_select(query))

    SELECT * FROM table 
    True

    # SELECT * FROM table;
    DROP TABLE table;
    False

   /* SELECT * FROM 
   TABLE /* DROP table table; 
   False

   # here is a comment
   SELECT * FROM table
   True


 类似资料:
  • 在SQL中,语句用于从数据库中的表中查询或检索数据。 返回存储在表中的数据,返回的结果称为结果集。 语法 这里,表达式是要从中选择数据的表的字段名称。使用以下语法选择表中可用的所有字段: 假设表有以下行记录 - EMP_ID EMP_NAME CITY PHONE_NO SALARY 1 Kristen Chicago 9737287378 150000 2 Russell Austin 9262

  • SELECT 语句用于从数据库中选取数据。 SQL SELECT 语句 SELECT 语句用于从数据库中选取数据。 结果被存储在一个结果表中,称为结果集。 SQL SELECT 语法SELECT column_name,column_name FROM table_name; 与SELECT * FROM table_name; 演示数据库 在本教程中,我们将使用 RUNOOB 样本数据库。 下面

  • 在 T-SQL 中,SELECT 语句用于从数据库表中获取数据,并以结果的形式返回数据。这些表在 SELECT STATEMENT 中称为结果集。 Select语句的语法: 其中 column1、column2、column N 是要获取其值的表的字段。如果获取该表中所有可用的字段,那么需要使用给定的语法—— 例子: 考虑具有以下记录的 CUSTOMERS 表- 以下命令是一个示例,它将获取 CU

  • 通过 SQL,您可以从一个表复制信息到另一个表。 SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中。 SQL SELECT INTO 语句 SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中。 MySQL 数据库不支持 SELECT ... INTO 语句,但支持 INSERT INTO ... SELECT 。 当然你可以使用以下语句来拷贝表结构

  • SELECT DISTINCT 语句用于返回唯一不同的值。 SQL SELECT DISTINCT 语句 在表中,一个列可能会包含多个重复值,有时您也许希望仅仅列出不同(distinct)的值。 DISTINCT 关键词用于返回唯一不同的值。 SQL SELECT DISTINCT 语法SELECT DISTINCT column_name,column_name FROM table_name;

  • 是否可以在 SQL SERVER 中的事务中使用 SELECT 语句锁定行?我想锁定该行,以便外部的其他事务无法访问该行。 提交或回滚事务后,应释放该行。这就是我的意思。。。 有人有建议吗?我应该执行 UPDATE 语句来锁定该行吗? 请不要将此问题标记为重复问题。因为,我不是在问UPDATE语句,而是在问SELECT 编辑:我试图“设置事务隔离级别串行化”,但这锁定了太多东西。我的SP很大,它有