python 获取SQLServer中的数据并使用pandas将数据导出为csv文件所遇到的问题

今天遇到一个错误,给我整无语了。

我想要用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)

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值