解析sql中的表名

最近的项目需求中需要解析sql得表名,由于只需要表名我觉得应该用相对粗暴一点的方式来解析

初步思路:

1.转义字符:去除两个引号连在一起的

2.字符串: 去除所有被引号包裹的

3.括号:识别括号处理

4.关键字: 用关键字切割语句,去除与表名 无关的

5.解析与表名有关的切割分段得表名

先是粗暴的括号处理

def get_str(s):    you = 0    st = []    re = ‘‘    max_you = 0    for ii in s:        st.append(ii)    while st:        tmp = st.pop()        re = tmp + re        if tmp == ‘)‘:            you += 1            if max_you < you:                max_you = you        elif tmp == ‘(‘:            you -= 1            if you == 0:                return [re, max_you]    return [s, max_you]

s = "(1,2,(a,b),3,4,(a,b,(0,c,s,1000),(1,a,1200),(2,1400),(3,1600),(4,1800),n,m),((sd,df),(sw,gt))t,b)"

array = []array_level = []

for ch in range(len(s)):    if s[ch] == ‘)‘:        next_str = get_str(s[:ch+1])        while len(array_level) < next_str[1]:            array_level.append([])        array.append(next_str[0])        array_level[next_str[1]-1].append(next_str[0])

print arrayprint ‘-‘ * 60for i in array_level:    print i
时间: 2024-10-06 20:06:24

解析sql中的表名的相关文章

分析sql语句所有表名及其别名的正则表达式

最近为了 写一个分布式的数据组件构想了很多的方案,最近一个简单易行的方案终于在脑袋里成型.昨晚想到凌晨1点多,发现方案虽简单,但所有的数据库工具就不能使用了 .除非自己写一下查询分析器来执行程序员自己的维护语句. 说做就做,事情也出乎顺利,居然半天时间做了一个基本的版本出来了:) 于是就想想能否加上智能提示字段.似乎难在分析程序员录入的语法.当然说白了也简单就是取出表的别名.家里的空调没钱换,为了省100大元,还要晚几天才有得用.于是今晚继续晚点睡,把这个正则表达式弄出来,明天上班就能继续开发查

MySql 查询数据库中所有表名

查询数据库中所有表名select table_name from information_schema.tables where table_schema='csdb' and table_type='base table'; 查询指定数据库中指定表的所有字段名column_nameselect column_name from information_schema.columns where table_schema='csdb' and table_name='users'

django中自定义表名及字段名称

在meta 类中指定表名,在字段中通过db_column指定列名如下所示 class Record(models.Model): content=models.CharField(max_length=32,db_column='record_content') class Meta: db_table="Record"

Sql Server根据表名生成查询的存储过程(查询条件可选)

static void Main(string[] args) { string 表名 = "water_emstime"; string sql = "exec GetTableSelect " + 表名; string ConString = "server=xxx.xxx.xx.xx;database=newFW;uid=sa;pwd=sa"; SqlDataAdapter da = new SqlDataAdapter(sql, ConS

在mysql中修改表名的sql语句

在使用mysql时,经常遇到表名不符合规范或标准,但是表里已经有大量的数据了,如何保留数据,只更改表名呢?可以通过建一个相同的表结构的表,把原来的数据导入到新表中,但是这样视乎很麻烦.能否简单使用一个SQL语句就搞定呢?当然可以,mysql5.0下我们使用这样的SQL语句就可以了.ALTER TABLE table_name RENAME TO new_table_name例如 ALTER TABLE admin_user RENAME TO a_us

SQL语句修改表名和字段名

今天有个临时任务,修改生产环境的数据库表名和字段名.以前要修改表名字段名都是在开发环境,直接打开 SQL Server找到对应的表或字段重命名就OK啦,可是这是线上数据库,再想直接F2修改是不可能的啦.怎么办?乖 乖写脚本呗.上网了解了一些相关资料,结合我自己操作过程中出现的一些实际问题简单作个总结,再次加深下印 象. SQL自带了一系列的系统存储过程.其中sp_rename就具有修改表名和列名的功能.对于sp_rename是这样定 义的:更改当前数据库中用户创建对象(如表.列或用户定义数据类型

Sql中获取表结构(字段名称,类型,长度,说明)

在写代码生成器的时候遇到这样一个问题,想在搭建好数据库后把字段说明当做注释写进类文件里,所以我们在网上搜索到了许多代码很长很长的方法(当然我的代码也很长),亲测了一条简单易懂的语句,也是大多数转载的方法: SELECT TableName = OBJECT_NAME(c.object_id), ColumnsName = c.name, Description = ex.value, ColumnType=t.name, Length=c.max_length FROM sys.columns

sql 中多表查询-leetcode : Combine Two Tables

因为对数据库的内容早都忘得差不多了,所以我的第一感觉是: select Person.FirstName, Person.LastName, Address.City from Person, Address where Person.PersonId=Address.PersonId 结果出错了: 因为至少这个人是存在的,只是没有她的地址,你不至于搜不到吧, 但是我这种写法是引用两个表,从两个表中获取数据,就是找两者相同的情况下的结果. 使用join 可以连接两个表: join: 如果表中有一

pl/sql中误删表中数据并提交恢复办法

最近在操作表中数据时,删除了表中数据,但是又想恢复,后来查到了官方的一篇文档,发现还蛮有用的,如下: 在pl/sql中运行,select * from A as of TIMESTAMP to_timestamp('20150401','yyyymmdd'); 此原理是利用Flashback Query这一特性,最常被应用的就是修复误操作的数据了.注意,这并不是说Flashback Query能够恢复数据.Flashback Query本身不会恢复任何操作或修改,也不能告诉你做过什么操作或修改,