我有一个文本文件,其中包含大约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。显然不正确。有什么想法吗?
答案 0 :(得分:2)
问题根本不在于循环遍历多个SQL语句。问题是如何通过调用execute
来获得结果。
答案是在光标上调用fetchone()
。这将为您提供一个元组,因此请获取其中的第一个元素:
a.execute('SELECT count(*) FROM {}'.format(table))
z.append(a.fetchone()[0])