遍历多个SQL语句并将结果存储在Python对象中

时间:2019-04-04 21:14:19

标签: python sql loops

我有一个文本文件,其中包含大约100个DB表名,并用换行符隔开,并且我有一个函数可以在此处的列表中返回这些表名:

def grab_tables(self):
    table_list = []
    with open('tables.txt', 'r') as file:
        datalines = (line.rstrip('\r\n') for line in file)
        for line in datalines:
            table_list.append(line)
    return table_list

我现在想连接到数据库,并对所有这些表进行选择计数(*),并将表名和计数存储在某些python对象(列表,字典等)中。到目前为止,我的情况是这样:

def run_sql(self):
    s = self.connection_src() #function that connects to Oracle DB
    tables = self.grab_tables()
    a = s.cursor()
    z = []
    for table in tables:            
        a.execute('SELECT count(*) FROM {}'.format(table))
        z.append(a)

    print(z)

但这不起作用,因为它将连接详细信息附加到z。显然不正确。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

问题根本不在于循环遍历多个SQL语句。问题是如何通过调用execute来获得结果。

答案是在光标上调用fetchone()。这将为您提供一个元组,因此请获取其中的第一个元素:

a.execute('SELECT count(*) FROM {}'.format(table))
z.append(a.fetchone()[0])