2016-02-09 56 views
4

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

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() 

我正在以下背部(从INT场d/B):

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

回答

2

是的,这是预期的行为。将光标用作迭代器基本上等同于使用fetchone()方法对其进行循环。从documentation for fetchone()(重点煤矿):

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

+0

与我提出的原始问题并不真正相关,但是如何将(Decimal('992309'))转换为992309? – epipko

+1

@epipko抓取元组的第一个元素('[0]'),然后得到一个[Decimal对象](https://docs.python.org/2/library/decimal.html#decimal-objects ),如果你需要的话,你可以把它转换成“int”。 – glibdud