2017-07-02 19 views
-1

我有一個sqlite3的數據庫,看起來像這樣來查詢一個sqlite3的數據庫相關矩陣:如何使用先前定義的列表

|Tickers|A |B |C |D |E | 
|-------|----|----|----|----|----| 
|A  |1.00|0.25|0.75|0.60|0.30| 
|B  |0.25|1.00|0.20|0.40|0.70| 
|C  |0.75|0.20|1.00|0.10|0.90| 
|D  |0.60|0.40|0.10|1.00|0.50| 
|E  |0.30|0.70|0.90|0.50|1.00| 

我要查詢這個數據庫找到某些股票的相關性(其中列使用Python中的列表來滿足每個股票的行)。我用下面的代碼來創建列表,然後查詢數據庫:

Stocks=['A','B','C'] 
import sqlite3 
conn = sqlite3.connect('CorrelationMatrix') 
c = conn.cursor() 
Correlations=[] 
for i in range(0,len(Stocks)): 
    c.execute("SELECT Stocks[i] FROM CorrelationMatrix WHERE Tickers=Stocks[i]") 
for row in c.fetchall(): 
    Correlations.append(row) 
print(Correlations) 

我想查詢的結果爲那些3股的相關性(而不是所有5個)的列表,像這樣:

[1.00,0.75,0.25,0.25,1.00,0.20,0.75,0.20,1.00]

當我執行的代碼,並打印相關性列表,它會導致以下錯誤:

sqlite3.OperationalError: near "[i]": syntax error

看來,我無法用Python列表查詢數據庫?有沒有人有更好的解決方案來處理像這樣的矩陣?

回答

0

您可以使用字符串格式化來傳遞變量插值列名,嘗試用:

Stocks=['A','B','C'] 
c.execute("""SELECT %s FROM CorrelationMatrix WHERE Tickers in %s"""%(','.join(Stocks),tuple(Stocks))) 
rows = c.fetchall() 
Correlations = [e for r in rows for e in r] 
print(Correlations) 

Stocks=['A','B','C'] 
c.execute("""SELECT {a},{b},{c} FROM CorrelationMatrix WHERE Tickers in (?,?,?)""".format(a=Stocks[0], b=Stocks[1], c=Stocks[2]),(Stocks[0],Stocks[1],Stocks[2])) 
rows = c.fetchall() #[(1.0, 0.25, 0.75), (0.75, 0.2, 1.0), (0.25, 1.0, 0.2)] 
Correlations = [e for r in rows for e in r] 
print(Correlations) 

Correlations將是:

[1.0, 0.25, 0.75, 0.75, 0.2, 1.0, 0.25, 1.0, 0.2] 
相關問題