Python mysql 连接器 returns 元组

Python mysql connector returns tuple

我正在通过 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'),)

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

This method retrieves the next row of a query result set and returns a single sequence, or None if no more rows are available. By default, the returned tuple consists of data returned by the MySQL server, converted to Python objects. If the cursor is a raw cursor, no such conversion occurs;

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

首先你必须在游标中使其为真

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

那么结果会是这样的:

{'Decimal' : '991837'}

我确定 Decimal 是您的行名 因此,当您需要访问该值时,请执行此操作

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 玩得开心 :)