6

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

4 回答 4

9

fetchall()返回一个元组列表(实际上是一个元组)。将其视为一系列行,其中每一行是列中的一系列项目。如果您确定您的搜索将只返回 1 行,请使用 fetchone(),它返回一个元组,它更易于解包。下面是从 fetchall() 和 fetchone() 中提取所需内容的示例:

# Use fetchall():
((points,),) = cursor.fetchall()  # points = 56L

# Or, if you use fetchone():
(points,) = cursor.fetchone()     # points = 56L
于 2013-02-13T19:30:19.353 回答
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]
于 2016-10-21T09:45:51.360 回答
3

如果您使用查询仅获取一个值,则只需获取第 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']
于 2017-08-31T12:29:53.867 回答
1

56L是一个长整数。“长整数具有无限精度。” 它们可以像普通整数一样使用。

您可以通过执行以下操作来查看 long 值:

for result in results:
    print result[0]

示例 REPL 会话:

>>> results = ((56L,),)
>>> for result in results:
...     print(result[0])
...
56

.fetchall()在DB-API中定义为“作为序列序列(例如元组列表)”返回剩余行。MySQLdb 的默认值是使用一个元组的元组,看起来像这样(( ,),),甚至像这样( (1,2,3), (4,5,6) ),其中结果集的各个行是内部元组——因此总是具有相同的长度。

于 2013-02-13T19:19:15.503 回答