python解析sql文件提取表名_Python怎么从sql提取表名

本篇文章介绍了Python使用ply和re模块提取sql语句中表名的方法,具有一定的参考价值,希望对各位学习Python的朋友有帮助!

Python怎么从sql提取表名

ply:词法语法解析模块;

re:正则表达式模块。

全部代码如下:import ply.lex as lex, re

def extract_table_name_from_sql(sql_str):

# remove the /* */ comments

q = re.sub(r"/\*[^*]*\*+(?:[^*/][^*]*\*+)*/", "", sql_str)

# remove whole line -- and # comments

lines = [line for line in q.splitlines() if not re.match("^\s*(--|#)", line)]

# remove trailing -- and # comments

q = " ".join([re.split("--|#", line)[0] for line in lines])

# split on blanks, parens and semicolons

tokens = re.split(r"[\s)(;]+", q)

# scan the tokens. if we see a FROM or JOIN, we set the get_next

# flag, and grab the next one (unless it's SELECT).

result = []

get_next = False

for token in tokens:

if get_next:

if token.lower() not in ["", "select"]:

result.append(token)

get_next = False

get_next = token.lower() in ["from", "join"]

return result

sql2="SELECT a.time_updated_server/1000,content,nick,name FROM      " \

"table1 a JOIN   " \

"table2 b ON a.sender_id = b.user_id JOIN table3 c ON a.channel_id = c.channel_id JOIN table4 d ON c.store_id = d.store_id WHERE sender_id NOT IN(SELECT user_id FROM table5 WHERE store_id IN ('agent_store:1', 'ask:1')) AND to_timestamp(a.time_updated_server/1000)::date >= '2014-05-01' GROUP BY 1,2,3,4 HAVING sum(1) > 500 ORDER BY 1 ASC"

print(extract_table_name_from_sql(sql2))

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值