Есть код, (саму бд не прилагаю т.к. весит 666мб), его суть проста - он проходит по строчкам бд и ищет экстремумы, но вот беда, делает он это крайне медленно. Можно ли его оптимизировать? Или лучше использовать pandas (для обработки и возможно хранения записей (в таком случае велики ли будут потери в весе файла и на сколько?)) или вообще структурные массивы numpy и хранить в .npy (если такое возможно) или в каком нибуть csv. Пригодятся любые советы! Код ниже.
import sqlite3
connect = sqlite3.connect('exemple.db')
cursor = connect.cursor()
cursor.executescript("""
CREATE TABLE IF NOT EXISTS historical_data (
security_id TEXT,
date_and_time TEXT,
price REAL
);
CREATE TABLE IF NOT EXISTS extremes (
security_id TEXT,
date_and_time TEXT,
price REAL
);
CREATE TABLE IF NOT EXISTS levels (
security_id TEXT,
price REAL,
power TEXT
);
""")
security_id = "GAZP"
date_and_time = "2020-01-06 10:00"
cursor.execute("SELECT COUNT(*) FROM historical_data WHERE security_id = ? AND date_and_time LIKE ?", (security_id, f"%{date_and_time}%"))
for i in range(cursor.fetchall()[0][0]):
cursor.execute("SELECT * FROM historical_data WHERE security_id = ? AND date_and_time LIKE ? ORDER BY date_and_time LIMIT ?, 2", (security_id, f"%{date_and_time}%", i))
a = cursor.fetchall()
if a[1][2] - a[0][2] == 0:
print("EXTR!")
print(a)