我想用我存储在SQLite数据库中的数字做一些数学运算。我的疑问似乎有用。我的问题是让python将我从数据库中查询到的数字视为数字。在
第一个定义从我的数据库中选择一个唯一的行。第二个定义循环遍历数据库中的许多行,并将它们添加到要求和的数字列表中。在
当我试图把数字相加时,问题就出现了。谁能给我指出正确的方向吗?在
以下是我的一些代码:
def query_symbol(symbolId):
uniqueId = str(symbolId) + '@' + str(datetime.date.today())
conn = sqlite3.connect('sql/databse.db')
c = conn.cursor()
with conn:
c.execute("SELECT number FROM symbols WHERE uniqueId= ?", (uniqueId,))
return c.fetchall()
def calc(filename):
symbolIds = def_sec.load_symbolIds(filename)
print(len(symbolIds))
list = []
for symbolId in symbolIds:
data = query_symbol(symbolId)
#data = data.replace('()','')
list.append(data)
print(list)
total = sum(list)
print(total)
calc('index_symbolids')
我的错误消息如下:
^{pr2}$
我看到了两个问题。让我们看看您打印出来的
list
:它告诉我的是你有一个嵌套列表的列表(例如
[(13506636000.0,)]
)。这表示一行和一列,因为返回c.fetchall()
。在本例中,您肯定知道最多返回1行数据,因此我们可以使用c.fetchone()
来减少嵌套列表的数量。在接下来,看看这一行:
^{pr2}$由于
c.fetchone()
返回(13506636000.0,)
,这是一个1元素的元组,因此可以使用以下技巧提取数字:组合起来:
在这一点上,你应该得到想要的结果。在
更新
此更新解释了
(data,) =
的工作原理。假设,如果您有一个由3个元素组成的元组,并且想要分配给变量a
,b
,c
:实际上,我们可以从等号左边去掉括号:
对于1元素元组,表示法是
(1,)
,而不是(1)(它只是1
):回到您的问题,函数
query_symbol()
返回一个1元素元组,因此我们必须使用:我个人喜欢第一个语法,因为第二个语法看起来逗号是错误的。在
不,你在试着给列表加和。在
另外,您应该避免使用
list
作为变量,因为它隐藏了内置的list
。在相关问题 更多 >
编程相关推荐