我有一个文本文件,其中有大约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。显然不正确。有任何想法吗?
问题根本不在于循环遍历多个SQL语句。问题是如何通过调用execute
获得结果。
答案就是在光标上调用fetchone()
。这会给你一个元组,所以得到它的第一个元素:
a.execute('SELECT count(*) FROM {}'.format(table))
z.append(a.fetchone()[0])