我想获取特定行中的数据并能够使用它执行计算,到目前为止我有这个:
import sqlite3 as lite
con=con.connect(mydatabase.db)
cur=con.cursor()
query=cur.execute("SELECT price from items where ID=1")
print(cur.fetchone())
返回
(13.5,)
我无法对此进行任何计算。我决定将fetchone()方法视为一个元组并提出这个:
cur.fetchone()[0]
返回
13.5
我可以使用它,但我认为这是一个肮脏的解决方案是否有任何其他方式来获取数据? 我也试过了
for row in cur.fetchall():
print(row[0])
返回我可以使用的实数,但我不知道为什么会这样。
13.5
我可以使用的数字。我不知道哪两个解决方案更好,或者是否有更高效的解决方案。你能不能给我一个关于fetch对象的简要解释,我发现它们有点令人困惑。非常感谢您的帮助。
答案 0 :(得分:2)
它不脏。这就是Python的低级sql的工作原理。元组表示列(按照select
语句中定义的顺序,请记住,您不应该使用select *
,因为无法保证您将以何种顺序接收数据。因此cur.fetchone()[0]
绝对正常(只要price
在select
查询中是第一位)。
另一方面,fetchall
返回满足查询的所有行的列表。因此,调用fetchall
的结果是始终一个元组列表。它可能是一个空列表。基本上fetchone
与fetchall
做同样的事情,除了它从fetchall
获取下一行(因此多次调用fetchone
将获取fetchall
中的所有行。请注意,如果没有更多数据,fetchone
将返回None
。
答案 1 :(得分:1)
我不确定你为什么觉得它很脏。但有一点:你说你将方法视为一个元组,但这显然不对:方法返回一个元组。这没关系:您只需使用[0]
访问它的第一个元素,就像使用任何其他元组一样。不需要任何额外的循环。