今天遇到一个错误,给我整无语了。
我想要用python 获取SQLServer中的数据并使用pandas将数据导出为csv文件,然后遇到了问题:
先看看我报错顶的代码:
conn = pyodbc.connect('DRIVER={SQL Server};SERVER=LIDONYANG;DATABASE=学生考勤管理系统;UID=sa;PWD=120099')
cursor = conn.cursor()
try:
cursor.execute("SELECT attendance_course, time, regular_grade FROM attendance WHERE fkstudent_id = ?",
(user_id,))
rows = cursor.fetchall()
# 如果没有查询到数据,则不进行操作
if not rows:
print("No data found for the given student ID.")
# 可以选择在这里做一些错误处理或提示用户
else:
print('找到该学生的考勤平时分数据')
# cursor.execute("SELECT attendance_id, fkstudent_id, attendance_course, time, status, regular_grade "
# "FROM attendance WHERE fkstudent_id = ?", (user_id,))
# 执行查询
cursor.execute(
"SELECT attendance_id, fkstudent_id, attendance_course, FORMAT(time, 'yyyy-MM-dd') as "
"formatted_time, status, regular_grade "
"FROM attendance WHERE fkstudent_id = ?", (user_id,))
rows = cursor.fetchall()
print(type(rows))
# 如果没有查询到数据,则不进行操作
if not rows:
print("没有找到该学生的考勤平时分数据。")
QMessageBox.warning(self, '修改失败', '有数据未填完整!')
else:
print(type(rows))
columns = ['attendance_id', 'fkstudent_id', 'attendance_course', 'formatted_time', 'status',
'regular_grade'] # 你需要为每列数据提供一个合适的列名
df = pd.DataFrame(rows, columns=columns)
# 将DataFrame导出为CSV文件
output_filename = 'output_data.csv' # 你希望保存的CSV文件名
df.to_csv(output_filename, index=False,
encoding='utf-8-sig') # index=False表示不导出行索引,encoding='utf-8-sig'确保在Excel中正确显示中文
print(f'数据已导出到文件:{output_filename}')
finally:
cursor.close()
conn.close()
然后我从SQLServer获取的数据我输出来是这样的:
[('A003 ', 'S002 ', '管理学 ', '2024-04-03', '早退 ', 3),('A005 ', 'S002 ', '管理学 ', '2024-04-03', '准时 ', 5)]
我看了半天也没看出问题在哪里...
然后我去问GPT,结果发现rows是list没错,但是里面的不是元组,而是这么个玩意:<class 'pyodbc.Row'>
我真的服了。所以我们需要将list里面的<class 'pyodbc.Row'>转一下类型
这么做:
data = []
for row in rows:
data.append(list(row))
columns = ['attendance_id', 'fkstudent_id', 'attendance_course', 'formatted_time', 'status',
'regular_grade'] # 你需要为每列数据提供一个合适的列名
df = pd.DataFrame(data, columns=columns)