epi*_*pko 6 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()
Run Code Online (Sandbox Code Playgroud)
我得到以下回复(来自 d/b 中的 INT 字段):
(Decimal('991837'),)
(Decimal('991838'),)
(Decimal('991839'),)
(Decimal('991871'),)
(Decimal('991879'),)
(Decimal('991899'),)
(Decimal('992051'),)
(Decimal('992299'),)
(Decimal('992309'),)
Run Code Online (Sandbox Code Playgroud)
小智 5
如果您只想访问该行中的数据,则需要进入字典
首先你必须在光标中使其为真
cur = db.cursor( buffered=True , dictionary=True)
Run Code Online (Sandbox Code Playgroud)
那么结果将是这样的:
{'Decimal' : '991837'}
Run Code Online (Sandbox Code Playgroud)
我确定 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()
Run Code Online (Sandbox Code Playgroud)
我希望它适用于过去两天我一直在寻找这个解决方案,但没有答案,我调试的唯一方法是打开调试器并打印出所有变量,
享受Python的乐趣:)
是的,这是预期的行为。使用游标作为可迭代对象基本上等同于使用该fetchone()方法对其进行循环。来自(强调我的)的文档fetchone():
此方法检索查询结果集的下一行并返回单个序列,如果没有更多行可用,则返回 None 。默认情况下, 返回的元组由 MySQL 服务器返回的数据组成,并转换为 Python 对象。如果游标是原始游标,则不会发生此类转换;