Python MySql 选择单列返回奇怪的值

Posted

技术标签:

【中文标题】Python MySql 选择单列返回奇怪的值【英文标题】:Python MySql Select Single Column Returning Weird Values 【发布时间】:2016-01-27 07:29:19 【问题描述】:

我在制作一个练习脚本来教自己一些 Python 和 mysql.connector 库时遇到了这个问题。当我使用单列执行查询并打印值时,我得到如下结果:('tech-pc-1',) #Python 3.4.3 (u'tech-pc-1',) #Python 2.7.6 但是,当我执行包含多个列的查询并打印值时,我得到了我想要的结果。tech-pc-1 jdoe我正在执行此操作运行 Ubuntu 14.04 的服务器。

from mysql.connector import (connection)
import datetime<br>
conn = connection.MySQLConnection(user='user',password='pass',host='host',database='db')

single_col_query = "select comp from logons where dt between %s and %s"
multi_col_query = "select comp,user from logons where dt between %s and %s"

end_dt = datetime.datetime.now()
begin_dt = datetime.datetime(end_dt.year, end_dt.month, 1, 0, 0, 0)

cursor = conn.cursor()

cursor.execute(single_col_query, (begin_dt, end_dt))
for(comp) in cursor:
    print(comp)  # ex. ('tech-pc-1',) or (u'tech-pc-1',)

cursor.execute(multi_col_query, (begin_dt, end_dt))
for(comp,user) in cursor:
    print(comp, user)  # ex. tech-pc-1 jdoe

cursor.close()
conn.close()

我有几个问题:

    为什么会这样? 我该如何解决这个问题?

【问题讨论】:

这对我来说看起来很正常?我不确定您希望看到什么。 【参考方案1】:

即使只返回一列,您也总会得到一个元组。在您的第二个示例中,您解包元组,但在第一个示例中您没有,因此您看到了元组的 repr()。

要么在循环中解压:

for comp, in cursor:

或者在打印时直接引用元素:

print(comp[0])

请注意,for 语句中不需要括号,即使在解包时也是如此。

【讨论】:

以上是关于Python MySql 选择单列返回奇怪的值的主要内容,如果未能解决你的问题,请参考以下文章

QTableView 禁用选择单列

MySQL - 从两列中选择不同的值

MySQL使用Group Bu返回不正确的值[重复]

根据单列中的值拆分大文件(AWK)

从访客或用户中选择 ipv6 的单列,以不为空者为准

将逗号分隔的值与 MySQL 中的单列值匹配 [重复]