Pandas 的 ValueError - 传递值的形状

ValueError with Pandas - shaped of passed values

我正在尝试使用 Pandas 和 PyODBC 从 SQL 服务器视图中提取内容并将内容转储到 excel 文件。

但是,我在转储数据框时遇到错误(我可以打印列和数据框内容):

ValueError: Shape of passed values is (1, 228), indices imply (2, 228)

此论坛上还有其他几个与同一问题相关的问题,但是 none 讨论从 SQL 服务器 table 拉取内容。

我不知道是什么导致了这个错误,改变视图以不同方式转换源列也没有效果。

这是我正在使用的 python 代码:

import pyodbc
import pandas as pd
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=servername;DATABASE=dbname;UID=username;PWD=password')
cursor = cnxn.cursor()
script = """
SELECT * FROM schema.ActiveEnrollmentCount
"""
cursor.execute(script)
columns = [desc[0] for desc in cursor.description]

data = cursor.fetchall()

df = pd.DataFrame(list(data), columns=columns)

writer = pd.ExcelWriter('c:\temp\ActiveEnrollment.xlsx')
df.to_excel(writer, sheet_name='bar')

writer.save()

我要提取的 2 列都是 3 位整数。

要从数据库查询数据,最好使用内置的 read_sql_query 函数,而不是手动执行并转换为数据帧。
对于您的示例,这将给出如下内容:

df = pd.read_sql_query(script, cnxn)

有关 read_sql/to_sql 的更多说明,请参阅 docs

这用于将数据从 sqlserver 导出到 excel sheet 。

import pyodbc
    import pandas as pd
    from openpyxl import Workbook


    cnxn = pyodbc.connect("Driver={SQL Server Native Client 11.0};"
                          "Server=WINS2012;"
                          "Database=NameOfDataBase;"
                          "Trusted_Connection=yes;")


    cursor = cnxn.cursor()
    script = """
    SELECT * FROM ims_employee
    """
    cursor.execute(script)

    columns = [desc[0] for desc in cursor.description]

    data = cursor.fetchall()

    df = pd.read_sql_query(script, cnxn)

    writer = pd.ExcelWriter('C:\SqlExcel\Book1.xlsx')
    df.to_excel(writer, sheet_name='bar')

    writer.save()