在python中解析SQL查询

时间:2016-09-02 10:12:55

标签: python sql parsing

我需要在python中构建一个mini-sql引擎。所以我需要一个sql-parser,我发现了python-sqlparse但是我无法理解如何从表中提取列名或表名等SQL查询。有人可以帮我解决这个问题。

1 个答案:

答案 0 :(得分:4)

让我们检查python sqlparse文档:Documentation - getting started

你可以看到如何解析sql的示例。这就是:

<强> 1。首先,您需要使用parse方法解析sql语句:

sql = 'select * from "someschema"."mytable" where id = 1'
parsed = sqlparse.parse(sql)

<强> 2。现在您需要从解析后获取Statement对象:

stmt = parsed[0]
    '''(<DML 'select' at 0x9b63c34>,
 <Whitespace ' ' at 0x9b63e8c>,
 <Operator '*' at 0x9b63e64>,
 <Whitespace ' ' at 0x9b63c5c>,
 <Keyword 'from' at 0x9b63c84>,
 <Whitespace ' ' at 0x9b63cd4>,
 <Identifier '"somes...' at 0x9b5c62c>,
 <Whitespace ' ' at 0x9b63f04>,
 <Where 'where ...' at 0x9b5caac>)'''

第3。然后你可以用str()方法再次读取解析的sql语句:

#all sql statement
str(stmt)
#only parts of sql statements
str(stmt.tokens[-1])
#so the result of last str() method is 'where id = 1'

str(stmt.tokens[-1])的结果是'where id = 1'

如果您想要表格的名称,您只需要写:

str(stmt.tokens[-3])
#result "someschema"."mytable"

如果您需要可以调用的列名称:

str(stmt.tokens[2])
#result *, now it is operator * because there are not columns in this sql statements