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

标签 python mysql python-2.7 python-3.x mysql-connector-python

我在制作练习脚本以自学一些 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. 为什么会这样?
  2. 我该如何解决这个问题?

最佳答案

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

要么在循环中解压它:

for comp, in cursor:

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

print(comp[0])

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

关于Python MySql 选择单列返回奇怪的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33375559/

相关文章:

Python类继承

php - 在linux命令行上使用python(未运行)编译字符串

python - 类型错误 : 'int' object does not support item assignment error

php - 删除或替换不正确的字符串

php - field1 + field2 + field3 像 "%my_own_string%"在哪里?

python - 是什么导致 Python "Interpreter not Initialized (version mismatch?)"错误?

python - 使用 python 查找独特的网页链接

python - PyParsing:使用反斜杠的 shell 样式空格转义

mysql - 子查询从mysql返回多行错误结果

django - python 社交身份验证中的多个管道