我通过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'),)
答案 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玩得开心:)