SQL Parsing library for Python [duplicate]
Asked Answered
M

1

12

We need a SQL parsing or decomposing library for Python. We would like to be able to input a SQL text query and then get the query parts back as a result. It doesn't need to be fancy, or anything, but we would like to avoid doing the parsing ourselves. Ideally, we could do something like:

the_query = "select something from some_table where blah = 'thing' limit 15"
query_parts = the_library.parse(the_query)
print query_parts.limit().val()

>>> '15'

And this, too:

the_query = "select something from some_table where blah = 'thing'"
query_parts = the_library.parse(the_query)
print query_parts.limit().val()

>>> None

Can anyone give us any pointers for this? If the functionality is more limited, that's OK as well.

Thanks a lot!

Manservant answered 24/1, 2013 at 21:5 Comment(2)
https://mcmap.net/q/319578/-parsing-sql-with-python and navarra.ca/?p=538Transcribe
Indeed, I was going to suggest using pyparsing, but the linked question above already does that.Paralytic
P
9

You might like to take a look at sqlparse

Blatantly stolen from their homepage:

>>> # Parsing
>>> res = sqlparse.parse('select * from "someschema"."mytable" where id = 1')
>>> res
<<< (<Statement 'select...' at 0x9ad08ec>,)
>>> stmt = res[0]
>>> stmt.to_unicode()  # converting it back to unicode
<<< u'select * from "someschema"."mytable" where id = 1'
>>> # This is how the internal representation looks like:
>>> stmt.tokens
<<<
(<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>)
>>>
Pluri answered 24/1, 2013 at 22:41 Comment(1)
Exactly what we needed. Thanks!Manservant

© 2022 - 2024 — McMap. All rights reserved.