当前位置: 首页 > 图灵资讯 > 行业资讯> Python怎么从sql提取表名

Python怎么从sql提取表名

发布时间:2026-06-22 21:54:11

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

Python如何从sql中提取表名?

ply:词法语法分析模块;

re:正则表达模块。

所有代码如下:

importply.lexaslex,re


defextract_table_name_from_sql(sql_str):

#removethe/**/comments
q=re.sub(r"******:[**][*]***+","",sql_str)

#removewholeline--and#comments
lines=[lineforlineinq.splitlines()ifnotre.match("^\s*(--|#)",line)]

#removetrailing--and#comments
q="".join([re.split("--|#",line)[0]forlineinlines])

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

#scanthetokens.ifweseeaFROMorJOIN,wesettheget_next
#flag,andgrabthenextone(unlessit'sSELECT).

result=[]
get_next=False
fortokenintokens:
ifget_next:
iftoken.lower()notin["","select"]:
result.append(token)
get_next=False
get_next=token.lower()in["from","join"]

returnresult

sql2="SELECTa.time_updated_server/1000,content,nick,nameFROM"\
"table1aJOIN"\
"table2bONa.sender_id=b.user_idJOINtable3cONa.channel_id=c.channelidJOINtable4dONc.store_id=d.store_idWHEREsender_idNOTIN(SELECTuser_idFROMtable5WHEREstore_idIN('agent_store:1','ask:1'))ANDto_timestamp(a.time_updated_server/1000)::date>='2014-05-01'GROUPBY1,2,3,4HAVINGsum(1)>500ORDERBY1ASC"
print(extract_table_name_from_sql(sql2)

更多技术请关注Python视频教程。

相关文章

如何切换到Python2.7

如何切换到Python2.7

2026-06-26
Python字典如何换行

Python字典如何换行

2026-06-26
Python中怎么新建文件夹

Python中怎么新建文件夹

2026-06-26
Python中区分字符与字符串吗

Python中区分字符与字符串吗

2026-06-26
Python怎么从sql提取表名

Python怎么从sql提取表名

2026-06-22
Python怎么查看函数库

Python怎么查看函数库

2026-06-22