使用Python查看表是否存在

时间:2017-09-12 19:38:20

标签: python sql oracle

我必须连接到Oracle数据库并查看是否存在表。虽然我可以得到一个表的列表,但我很难看到我正在寻找的表是否在列表中。有些表有关联表,我必须加入,有些表没有,因此我必须检查。

我的清单中有什么:('NYSDOH_CI_EI_HOSPITAL')

sql =   "SELECT table_name FROM all_tables"

cur.execute(sql)

searchstr = 'NYSDOH_CI_EI_HOSPITAL'
p = re.compile(searchstr)

#create data array to load in SQL results in.
ciDataSet = []

cxRows = cur.fetchall()    
for i in cxRows:
    #print i  # list of tables
    if p.match(str(i)):  
        print  i

即使我使用通配符,也找不到它。

2 个答案:

答案 0 :(得分:3)

fetchall()返回元组列表。 所以当你这样做时

for i in cxRows:

'我'是类型元组。在您的情况下,此元组将只有单个值。您可以使用i [0]访问它并将其与p匹配。 目前您正在将元组转换为字符串,因此正则表达式将不匹配。

更正后的代码:

   sql =   "SELECT table_name FROM all_tables"

    cur.execute(sql)

    searchstr = 'NYSDOH_CI_EI_HOSPITAL'
    p = re.compile(searchstr)

    #create data array to load in SQL results in.
    ciDataSet = []

    cxRows = cur.fetchall()    
    for i in cxRows:
        #print i  # list of tables
        if p.match(str(i[0])):  
            print  i

答案 1 :(得分:2)

要改进@vaichidrewar的语法,可以将获取循环简化为:

for tabname, in cur:
    if p.match(str(tabname)):
        print(tabname)

但是在查询中进行reg exp匹配会更有效:

sql = "select table_name from all_tables where regexp_like(table_name, :tn, 'i')"
searchstr = 'EMP'

cur.execute(sql, (searchstr,))
for tabname, in cur:
    print(tabname)

'我'选项执行不区分大小写的匹配。您可以根据需要调整正则表达式。

相关问题