Python MySql Select 单列返回奇怪的值
Python MySql Select Single Column Returning Weird Values
我 运行 在制作一个练习脚本来自学一些 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()
我有几个问题:
- 为什么会这样?
- 我该如何解决这个问题?
即使只返回一列,您也总是会得到一个元组。在你的第二个例子中,你解包了元组,但在第一个例子中你没有,所以你看到了元组的 repr() 。
要么在循环中解压:
for comp, in cursor:
或者打印时直接引用元素:
print(comp[0])
请注意,即使在解包时,for 语句中也不需要括号。
我 运行 在制作一个练习脚本来自学一些 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()
我有几个问题:
- 为什么会这样?
- 我该如何解决这个问题?
即使只返回一列,您也总是会得到一个元组。在你的第二个例子中,你解包了元组,但在第一个例子中你没有,所以你看到了元组的 repr() 。
要么在循环中解压:
for comp, in cursor:
或者打印时直接引用元素:
print(comp[0])
请注意,即使在解包时,for 语句中也不需要括号。