You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行PyODBC查询后仅返回<pyodbc.Cursor at 0x2b9b4266f30>,缺失什么操作?

如何从PyODBC Cursor获取SQL Server查询结果?

你现在的代码已经成功建立了和SQL Server的连接,也执行了查询语句,但只是创建并运行了cursor对象,没有去提取查询返回的数据——这就是为什么你只看到<pyodbc.Cursor at 0x2b9b4266f30>这个cursor实例的原因。

接下来给你几种获取结果的常用方法,按需选择:

方法1:一次性获取所有结果(fetchall())

如果你的查询结果行数不多,可以用fetchall()一次性把所有结果取出来,每一行是一个可以通过列名或索引访问的对象:

import pyodbc
cnxn = pyodbc.connect(r'Driver={SQL Server};Server=DESKTOP-5QSCP7A;Database=AdventureWorks2012;Trusted_Connection=yes;')
cursor = cnxn.cursor()
cursor.execute("SELECT FirstName, LastName FROM [Person].[Person] WHERE MiddleName='M' AND FirstName='Abigail'")

# 提取所有结果
all_results = cursor.fetchall()
for row in all_results:
    # 两种访问方式:列名或者索引
    print(f"姓名:{row.FirstName} {row.LastName}")
    # 或者 print(row[0], row[1])

# 记得关闭资源
cursor.close()
cnxn.close()

方法2:逐行获取结果(fetchone())

如果结果集很大,一次性加载会占用太多内存,就用fetchone()每次取一行,直到返回None表示没有更多数据:

import pyodbc
cnxn = pyodbc.connect(r'Driver={SQL Server};Server=DESKTOP-5QSCP7A;Database=AdventureWorks2012;Trusted_Connection=yes;')
cursor = cnxn.cursor()
cursor.execute("SELECT FirstName, LastName FROM [Person].[Person] WHERE MiddleName='M' AND FirstName='Abigail'")

# 逐行读取
current_row = cursor.fetchone()
while current_row:
    print(current_row.FirstName, current_row.LastName)
    current_row = cursor.fetchone()

cursor.close()
cnxn.close()

方法3:直接遍历Cursor(最简洁)

PyODBC的Cursor对象本身是可迭代的,直接用for循环遍历就能逐行获取数据,这也是最常用的写法:

import pyodbc
cnxn = pyodbc.connect(r'Driver={SQL Server};Server=DESKTOP-5QSCP7A;Database=AdventureWorks2012;Trusted_Connection=yes;')
cursor = cnxn.cursor()
cursor.execute("SELECT FirstName, LastName FROM [Person].[Person] WHERE MiddleName='M' AND FirstName='Abigail'")

# 直接遍历cursor
for row in cursor:
    print(row.FirstName, row.LastName)

cursor.close()
cnxn.close()

推荐:用上下文管理器自动管理资源

上面的写法需要手动关闭cursor和连接,容易遗漏。更推荐用with语句(上下文管理器),它会自动帮你关闭资源,不用手动调用close():

import pyodbc

# 连接和cursor都用with包裹
with pyodbc.connect(r'Driver={SQL Server};Server=DESKTOP-5QSCP7A;Database=AdventureWorks2012;Trusted_Connection=yes;') as cnxn:
    with cnxn.cursor() as cursor:
        cursor.execute("SELECT FirstName, LastName FROM [Person].[Person] WHERE MiddleName='M' AND FirstName='Abigail'")
        for row in cursor:
            print(row.FirstName, row.LastName)

内容的提问来源于stack exchange,提问作者Carlos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:38:16