当前位置:  开发笔记 > 编程语言 > 正文

Python MySQLdb:在游标上迭代

如何解决《PythonMySQLdb:在游标上迭代》经验,为你挑选了1个好方法。

在另一篇文章中,此代码:

connection = MySQLdb.connect(...)
cursor = connection.cursor()
cursor.execute("SHOW TABLES")
for (table_name,) in cursor:
    print(table_name)

正确地迭代游标中的表名,而此代码是:

for table_name in cursor:
    print(table_name)

返回以下形式的元素:

('some_table',)

经过大量搜索,我无法理解这一点。有人可以解释其中的区别吗?我不能弄清楚究竟execute()返回什么。另外,我无法弄清楚为什么第一个迭代器的形式(使用括号和逗号)会起作用。



1> Luke Woodwar..:

本身execute()不返回任何东西。执行查询后,在游标上进行迭代时,您会以元组的形式从查询中返回数据。

您的查询仅返回一列,因此得到1个元组。

Python中的1元组看起来有些奇怪。 ()是一个空的元组,(1, 2)是一个2元组,但(1)只是1括号中的数字,而不是元组。(1,)因此,这样的1元组必须带有逗号,才能被识别为元组。

如果运行的查询选择了三列,则可以使用以下内容从每一行中读取三个值:

cursor.execute("SELECT a, b, c FROM some_table")
for (a_value, b_value, c_value) in cursor:
    # do stuff...

您的第一个代码执行的操作相同,但是将1个元组而不是3个元组解包。

另一方面,您的第二个代码只是简单地遍历从游标出来的内容(即1元组),而无需进行任何拆包。

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有