簡體   English   中英

Python 腳本無法執行 SQL Select 語句

[英]Python script can't execute SQL Select statement

我正在嘗試執行來自 Microsoft SQL 服務器的 SQL SELECT 語句,並將該數據寫入 SQL 服務器並將該數據寫入 Z96607C902EZD2BB86607C902ED4D2 電子表格。

但是,每當我執行 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 但我不知道為什么。

有什么我想念的嗎?

這是我的腳本:

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塊)時,該語句已執行但尚未檢索到行。 但是,退出上下文管理器也會“終止”連接,因此for row in rs:當 ODBC 驅動程序嘗試調用SQLFetch時會引發錯誤。

您可以通過使用.all()with塊中檢索行來避免錯誤:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM