У меня есть база данных my_database.db
с тысячами таблиц, состоящих из временных рядов тысяч временных точек для примерно десяти переменных. Пример приведен в приведенном ниже коде только с пятью таблицами, соответствующими названиям городов, но в моей реальной задаче у меня тысячи. Мне нужно выбрать строку в каждой таблице, соответствующую метке времени date_str
(первичный ключ для каждой таблицы), если эта метка времени существует в этой таблице, и, в конце, вернуть таблицу, которая содержит эти строки вместе с именем таблица, из которой получена строка.
Есть ли способ ускорить этот код, который не включает в себя реструктуризацию всей базы данных (возможно, способ вызвать SELECT
для всех таблиц одновременно вместо циклического прохождения столы)? Обратите внимание, что cities
является фиксированным, а date_str
является параметром.
import sqlite3
import pandas as pd
conn = sqlite3.connect(f'my_database.db')
c = conn.cursor()
cities = ('sanfrancisco', 'dallas', 'newyork', 'chicago', 'miami')
columns = ('timestamp', 'population', 'averageincome')
def get_data(date_str):
data = []
for city in cities:
c.execute(f"SELECT * from {city} WHERE timestamp='{date_str}'")
result = c.fetchall()
if result: # will be False if no data was recorded for date given by date_str
data.append([city] + list(result[0]))
return pd.DataFrame(data, columns=columns)