想解析sql join查询,选择子查询进入python。我正在使用 sqlparse 库。但我无法解析子查询。我如何解析整个查询。

例如:

query = "select id,fname,lname,address from res_users as r left join res_partner as p on p.id=r.partner_id where name = (select name from res_partner where id = 1)" 
 
query_tokens = sqlparse.parse(query)[0].tokens 

我无法解析这个 select name from res_partner where id = 1子查询。

请您参考如下方法:

不那么优雅,但有效:

import sqlparse 
from sqlparse.sql import Where, Comparison, Parenthesis 
 
query = """ 
select 
    id,fname,lname,address 
from 
    res_users as r 
    left join 
        res_partner as p 
    on 
        p.id=r.partner_id 
where 
    name = (select name from res_partner where id = 1)""" 
 
query_tokens = sqlparse.parse(query)[0] 
where = next(token for token in query_tokens.tokens if isinstance(token, Where)) 
condition = next(token for token in where.tokens if isinstance(token, Comparison)) 
subquery = next(token for token in condition.tokens if isinstance(token, Parenthesis)) 
print subquery 

打印:
(select name from res_partner where id = 1) 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!