我有以下代码:
import sqlite3
import numpy as np
conn = sqlite3.connect('test.db')
c = conn.cursor()
c.execute("SELECT timestamp FROM stockData");
times = np.array(c.fetchall())
times = times.reshape(len(times))
buys = []
sells = []
def price(time):
c.execute("SELECT aapl FROM stockData WHERE timestamp = :t", {'t':time});
return c.fetchone()[0]
def trader(time):
p = float(price(time))
if(p < 186):
buys.append(p)
if(p > 186.5):
sells.append(p)
vfunc = np.vectorize(trader)
vfunc(times[:1000])
这需要大约一分钟的时间来执行,我之所以这样做是因为我无法从SQLite DB中调用特定的数据点。我意识到我可以通过使用以下内容调用所有相关数据点来解决这个问题:
SEARCH aapl FROM stockData WHERE aapl < 186;
但我已经开始让我的代码逐个循环遍历所有时间戳,因为我想保持适当的年表。
我的数据库长约500万行,因此目前的方法不可行。我怎样才能最有效地循环并检索这些数据?