优草派  >   Python

Python怎么从sql提取表名?这篇文章一定要看

陈立鑫            来源:优草派

很多小伙伴想知道python中如何从sql提取表名?那么今天小编就通过这篇文章来给大家讲解一下具体实现的方法,感兴趣的小伙伴可以仔细阅读一下这篇文章。

Python怎么从sql提取表名?这篇文章一定要看

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))

以上就是小编给大家带来的在python中提取表名的方法,希望大家通过阅读小编的文章之后能够有所收获!如果大家觉得小编的文章不错的话,可以多多分享给有需要的人。

【原创声明】凡注明“来源:优草派”的文章,系本站原创,任何单位或个人未经本站书面授权不得转载、链接、转贴或以其他方式复制发表。否则,本站将依法追究其法律责任。
TOP 10
  • 周排行
  • 月排行