Прежде чем публиковать свое решение, я должен включить быстрое предупреждение о том, что вы никогда не должны использовать манипуляции со строками для генерации SQL-запросов, если это абсолютно не неизбежно, и в таких случаях вы должны быть уверены, что вы контролируете данные, которыеиспользуется для форматирования строк, и он не будет содержать ничего, что заставит запрос сделать что-то непреднамеренное.
С учетом вышесказанного, это похоже на одну из тех ситуаций, когда вам нужно использовать форматирование строки, так какВы не можете передавать имена таблиц в качестве параметров.Просто убедитесь, что пользователи не смогут изменить то, что содержится в вашем списке таблиц.
В решение.Похоже, вы можете получить список таблиц, используя:
tables = Ave.columns.tolist()
Для моего простого примера я собираюсь использовать:
tables = ['table1', 'table2', 'table3']
Затем используйте следующий код для генерацииодин запрос:
query_template = 'select * from {}'
query_parts = []
for table in tables:
query = query_template.format(table)
query_parts.append(query)
full_query = ' union all '.join(query_parts)
Предоставление:
'select * from table1 union all select * from table2 union all select * from table3'
Затем вы можете просто выполнить этот один запрос, чтобы получить свои результаты:
cnx = sqlite3.connect('Market_Cap.db')
df = pd.read_sql_query(full_query, cnx)
Тогда отсюда вы должныбыть в состоянии установить индекс, преобразовать в datetime и т. д., но теперь вам нужно выполнять эти операции только один раз, а не 300 раз.Я полагаю, что общее время выполнения этого теперь должно быть намного быстрее.