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

Python+pyodbc执行SQL Server SELECT INTO语句失败及报错排查

解决pyodbc执行SELECT INTO创建表失败及"No results"报错问题

问题核心原因

  1. SELECT INTO不返回查询结果:你执行的是DDL(数据定义语言)语句,用于创建新表并插入数据,这类语句不会生成结果集,所以尝试遍历cursor会触发No results报错。
  2. 事务未提交:SQL Server默认开启隐式事务,pyodbc不会自动提交事务,执行完语句后如果不手动提交,连接关闭时所有操作会被回滚,导致新表temp4根本没被创建(这也是你注释结果处理后看似成功但表不存在的原因)。

修正后的代码

# Import Libs
import re
import pyodbc
from datetime import datetime

# 连接SQL数据库
conn = pyodbc.connect('DRIVER={SQL Server};'
                      'SERVER=Censored;'
                      'DATABASE=1110_Database;'
                      'UID=Censored;'
                      'Trusted_Connection=Yes;'
                      'WSID=Censored;'
                      'PWD=PASSWORD'
                      )

cursor = conn.cursor()

# SQL语句:创建temp4表并插入数据
query = ''' 
            SET NOCOUNT ON
            Select Top 10 * 
            INTO [1110_Database].[dbo].[temp4] 
            FROM [1110_Database].[dbo].[Table1]
        '''

# 执行语句
cursor.execute(query)
# 关键:提交事务,确保表被持久化创建
conn.commit()

# 关闭资源
cursor.close()
conn.close()

print("表temp4创建成功")

关键说明

  • 移除遍历cursor收集结果的代码:SELECT INTO不会返回任何行,完全不需要处理结果集。
  • 必须调用conn.commit():这是让SQL Server确认执行DDL操作的核心步骤,没有这一步,所有修改都会在连接关闭时被撤销。
  • 无需重复创建cursor:原代码里两次cursor = conn.cursor()是冗余操作,创建一次即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 15:35:07