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