2013-01-24 10 views
9

Potrzebujemy biblioteki parsowania lub dekompozycji SQL dla Pythona. Chcielibyśmy móc wprowadzić zapytanie tekstowe SQL, a następnie otrzymać części zapytania z powrotem. To nie musi być fantazyjne, ani nic, ale chcemy, abyśmy uniknęli parsowania samych siebie. Idealnie, moglibyśmy zrobić coś takiego:Biblioteka analizy SQL dla Pythona

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' 

i to też:

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

>>> None 

Czy ktoś może dać nam żadnych wskazówek na to? Jeśli funkcjonalność jest bardziej ograniczona, również jest OK.

Wielkie dzięki!

+2

http://stackoverflow.com/questions/1394998/parsing-sql-with-python i http : //navarra.ca/? p = 538 –

+2

Rzeczywiście, miałem zamiar zasugerować użycie pyparku, ale powyższe pytanie już to robi. –

Odpowiedz

6

Może chcesz przyjrzeć sqlparse

rażąco skradzione z ich głównej:

>>> # 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>) 
>>> 
+1

Dokładnie to, czego potrzebowaliśmy. Dzięki! –

Powiązane problemy