我正在尝试使用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位整数。
答案 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()