首页 文章

如何使用先前定义的列表查询SQLite3数据库相关矩阵

提问于
浏览
-1

我有一个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:“[i]”附近:语法错误

看来我无法使用python列表查询数据库?有没有人有更好的解决方案来处理像这样的矩阵?

1 回答

  • 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]
    

相关问题