当我使用python从SQL数据库中获取结果时,我会在返回值的开头和结尾处获得额外的章程。例如下面的代码返回((56L,),而不是56,有没有人知道如何获得值......以及((,),)实际意味着什么......?
hp= 56
id= 3
database = MySQLdb.connect (host="localhost", user = "root", passwd = "", db = "db")
cursor = database.cursor()
cursor.execute("UPDATE period_option SET points =%s WHERE period_option_id =%s", (hp, id))
cursor.execute("SELECT points FROM period_option WHERE period_option_id =%s", (po_id_home))
results = cursor.fetchall()
print results
答案 0 :(得分:7)
fetchall()
返回一个元组列表(实际上是一个元组)。可以将其视为一系列行,其中每一行都是列中的一系列项。如果您确定您的搜索只返回1行,请使用fetchone(),它返回一个元组,这更容易解压缩。以下是从fetchall()和fetchone()中提取所需内容的示例:
# Use fetchall():
((points,),) = cursor.fetchall() # points = 56L
# Or, if you use fetchone():
(points,) = cursor.fetchone() # points = 56L
答案 1 :(得分:3)
尝试以下方法,将fetchall()输出转换为更好的列表将有所帮助:
row = cursor.fetchall()
print row
output is : [(1,), (2,), (3,), (4,)]
num = list(sum(row, ()))
print num
output is : [1, 2, 3, 4]
答案 2 :(得分:2)
如果您使用查询只获取一个值,则可以采用第0个索引。
results = cursor.fetchall()
如果结果只有一个值,则使用results[0]
。它应该为您提供您正在寻找的价值。
有时我们在运行查询时会得到一个巨大的结果,在这种情况下,我们将不得不迭代这些值并将其分配给列表。
>>> result
('58',)
>>> result[0]
'58'
当您运行查询大型项目时,使用curosr.fetchall()时会得到类似的输出
(('58',),('50',),('10'),)
使用以下代码以列表格式获取数据
>>> results=(('58',),('50',),('10'),)
>>>[x[0] for x in results] --> code
['58', '50', '1']
答案 3 :(得分:1)
56L
是long integer。 “长整数具有无限精度。”它们可以像普通整数一样使用。
您可以通过执行以下操作来查看长值:
for result in results:
print result[0]
示例REPL会话:
>>> results = ((56L,),)
>>> for result in results:
... print(result[0])
...
56
.fetchall()
在the DB-API中定义为将剩余行作为序列序列(例如元组列表)返回“。 MySQLdb的默认设置是使用一个元组元组,它们看起来像(( ,),)
,或者甚至像( (1,2,3), (4,5,6) )
一样,其中结果集的各行是内部元组 - 因此总是具有相同的长度。 / p>