sql python_用Python解析SQL

TwoLaid的Python的SQL语法分析器都非常好,我的目的。它用C编写,需要编译。它很健壮。它解析每个子句的各个元素。

我用它来解析出查询列名在报告标题中使用。这是一个例子。

import sqlparser

def get_query_columns(sql):

'''Return a list of column headers from given sqls select clause'''

columns = []

parser = sqlparser.Parser()

# Parser does not like new lines

sql2 = sql.replace('\n', ' ')

# Check for syntax errors

if parser.check_syntax(sql2) != 0:

raise Exception('get_query_columns: SQL invalid.')

stmt = parser.get_statement(0)

root = stmt.get_root()

qcolumns = root.__dict__['resultColumnList']

for qcolumn in qcolumns.list:

if qcolumn.aliasClause:

alias = qcolumn.aliasClause.get_text()

columns.append(alias)

else:

name = qcolumn.get_text()

name = name.split('.')[-1] # remove table alias

columns.append(name)

return columns

sql = '''

SELECT

a.a,

replace(coalesce(a.b, 'x'), 'x', 'y') as jim,

a.bla as sally -- some comment

FROM

table_a as a

WHERE

c > 20

'''

print get_query_columns(sql)

# output: ['a', 'jim', 'sally']

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值