Python mysql连接器返回元组

时间:2016-02-09 19:05:58

标签: python mysql-connector

我通过mysql连接器连接到mysql数据库,并运行一个简单的查询来提取ID列表。我需要遍历该列表并将它们传递给其他代码。出于某种原因,我得到了一个元组列表。这是预期的行为吗?如果没有,我做错了什么? 以下是我的代码片段:

import mysql.connector
conn = mysql.connector.connect(host='127.0.0.1', database='t', user='r', password='pwd')
cursor = conn.cursor()
query = ( "select id from T where updated < '%s'" % (run_date) )
cursor.execute(query)
for row in cursor:
   print (row)

cursor.close()

我得到以下回复(来自d / b中的INT字段):

(Decimal('991837'),)
(Decimal('991838'),)
(Decimal('991839'),)
(Decimal('991871'),)
(Decimal('991879'),)
(Decimal('991899'),)
(Decimal('992051'),)
(Decimal('992299'),)
(Decimal('992309'),)

2 个答案:

答案 0 :(得分:2)

是的,这是预期的行为。将游标用作可迭代基本上等同于使用fetchone()方法对其进行循环。来自documentation for fetchone()(强调我的):

  

此方法检索查询结果集的下一行并返回一个   单个序列,如果没有更多行可用则为None。默认情况下,   返回的元组由MySQL服务器返回的数据组成,   转换为Python对象。如果光标是原始光标,则没有   转换发生;

答案 1 :(得分:0)

如果您只想访问该行中的数据,则需要进入字典

首先,您必须在光标中将其设置为真

cur = db.cursor( buffered=True , dictionary=True)

然后结果将是这样:

{'Decimal' : '991837'}

我确定十进制是您的行名 因此,当您需要访问值时,请执行以下操作

import mysql.connector
conn = mysql.connector.connect(host='127.0.0.1', database='t', user='r', password='pwd')
cursor = conn.cursor()
query = ( "select id from T where updated < '%s'" % (run_date) )
cursor.execute(query)
for row in cursor:
   print (row['Decimal'])

cursor.close()

我希望它适用于我过去2天一直在寻找此解决方案,但没有答案 我调试的唯一方法是打开调试器并打印出所有变量
与Python玩得开心:)