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

PyPyodbc执行SELECT查询返回Cursor对象而非数据问题排查

解决PyPyodbc查询返回Cursor对象而非数据的问题

你的核心问题是没有从查询后的cursor中提取实际结果集,直接将cursor对象赋值给了data变量,所以才会返回<pypyodbc.Cursor object...>这类对象标识,而非数据库数据。

修正方案

  1. 执行SELECT查询后,调用cursor的fetchall()方法获取所有结果行(也可根据需求用fetchone()取单行、fetchmany(n)取指定行数)
  2. 规范cursor的创建与调用流程,避免链式调用可能引发的隐性问题
  3. 优先关闭cursor再关闭连接,保证资源释放顺序

修正后的代码

from flask import Flask, render_template, request
import pypyodbc as odbc

app = Flask(__name__)

@app.route('/')
def base():
    return render_template('base.html')

@app.route('/index.html')
def index():
    connection_string = 'Driver={ODBC Driver 18 for SQL Server};Rest hidden for security'

    conn = odbc.connect(connection_string)
    cursor = conn.cursor()  # 单独创建cursor实例

    sql = '''
    SELECT * FROM [dbo].[Hours] 
    '''
    cursor.execute(sql)  # 执行查询语句
    data = cursor.fetchall()  # 提取所有查询结果

    print(data)  # 此时会打印实际数据集,如[(行1数据), (行2数据)]
    cursor.close()  # 先关闭cursor
    conn.close()
    return render_template('index.html', data=data)

额外注意

如果你的INSERT操作在其他路由中,务必确保执行INSERT后调用conn.commit()提交事务,否则可能出现事务未提交导致的查询数据不一致问题(你提到数据库中数据已存在,此步骤大概率已完成,但仍需确认)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 08:29:59