cursor.fetchall()使用MySQldb和python返回额外的字符

时间:2013-02-13 19:12:02

标签: python mysql mysql-python

当我使用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  

4 个答案:

答案 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)

56Llong 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>