带有Pandas的ValueError - 传递值的形状

时间:2015-07-21 21:34:53

标签: python pandas pyodbc

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

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

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

此论坛上还有其他几个与同一问题相关的问题,但没有一个讨论从SQL Server表中提取。

我无法弄清楚导致此错误的原因,并且更改视图以不同方式投射源列无效。

这是我正在使用的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位整数。

2 个答案:

答案 0 :(得分:1)

要查询数据库中的数据,您可以更好地使用内置的read_sql_query函数,而不是手动执行和转换为数据框。 对于您的示例,这将提供类似的内容:

df = pd.read_sql_query(script, cnxn)

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

答案 1 :(得分:0)

这可以将数据从sqlserver导出到excel表。

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()