我正在try 从Microsoft SQL Server执行一条SQL SELECT语句,并将该数据写入ExcelElectron 表格.

但是,每当我执行该Python脚本时,我都会收到以下错误:

Traceback (most recent call last):
  File "C:\Users\rrw\AppData\Roaming\Python\Python310\site-packages\sqlalchemy\engine\cursor.py", line 955, in fetchone
    row = dbapi_cursor.fetchone()
pyodbc.Error: ('HY010', '[HY010] [Microsoft][ODBC Driver 17 for SQL Server]Function sequence error (0) (SQLFetch)')     

Traceback (most recent call last):
  File "F:\Astro\Python\AstroPy\WriteSQLData.py", line 91, in <module>
    for row in rs:
    

我可以从错误中看出,它不喜欢脚本末尾的行:for row in rs.但我想不出为什么.

我有什么遗漏的吗?

以下是我的 playbook :

from sqlalchemy import create_engine
from sqlalchemy.engine import URL
import pyodbc
import pandas as pd
import csv
import configparser

# Get data from configuration ini file
config = configparser.ConfigParser()
config.read('databaseConfig.ini')
destinationFile = config['destination']['fileName']

# Database Connection Code
connection_string = "DRIVER={ODBC Driver 17 for SQL Server};SERVER=ASTROLAB;DATABASE=AstronomyMaps;UID=xyz;PWD=xyz"
connection_url = URL.create(
    "mssql+pyodbc", query={"odbc_connect": connection_string})

engine = create_engine(connection_url)

# Simple test query
qry = "SELECT TOP (1000) * FROM [AstronomyMaps].[dbo].[starMapA]"
with engine.connect() as con:
    rs = con.execute(qry)
    
# Write query data to Excel spreadsheet 
with open(destinationFile, 'w', newline='') as f:
    a = csv.writer(f, delimiter=',')
    a.writerow([x[0] for x in cursor.description])
    a.writerows(row)

    for row in rs:
        print(row)

推荐答案

当您退出上下文管理器(with块)时,语句已经执行,但是行还没有被检索到.然而,退出上下文管理器也会"终止"连接,因此当ODBC驱动程序try 调用SQLFetch时,for row in rs:会抛出一个错误.

您可以使用.all()来检索仍在with块中的行,从而避免错误:

with engine.connect() as con:
    rs = con.execute(qry).all()

Python相关问答推荐

输出中带有南的亚麻神经网络

将数据框架与导入的Excel文件一起使用

用Python解密Java加密文件

如何更改分组条形图中条形图的 colored颜色 ?

try 将一行连接到Tensorflow中的矩阵

使用Python更新字典中的值

创建可序列化数据模型的最佳方法

为什么'if x is None:pass'比'x is None'单独使用更快?

具有相同图例 colored颜色 和标签的堆叠子图

巨 Python :逆向猜谜游戏

Cython无法识别Numpy类型

如何使用Azure Function将xlsb转换为xlsx?

极柱内丢失类型信息""

PYTHON中的selenium不会打开 chromium URL

与同步和异步客户端兼容的Python函数

我可以同时更改多个图像吗?

用LAKEF划分实木地板AWS Wrangler

在Django REST框架中定义的URL获得404分

从`end_date`回溯,如何计算以极为单位的滚动统计量?

有理由将基于Django职业的观点个人化吗?