Python+pyodbc执行SQL Server SELECT INTO语句失败及报错排查
解决pyodbc执行SELECT INTO创建表失败及"No results"报错问题
问题核心原因
SELECT INTO不返回查询结果:你执行的是DDL(数据定义语言)语句,用于创建新表并插入数据,这类语句不会生成结果集,所以尝试遍历cursor会触发No results报错。- 事务未提交: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
相关产品推荐
相关产品推荐

