MYSQL海量数据导出到EXCEL

Posted myrj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MYSQL海量数据导出到EXCEL相关的知识,希望对你有一定的参考价值。

import pymysql
import openpyxl
import time
def export_to_excel(worksheet, cursor, table):
    """
    将MySQL一个数据表导出到excel文件的一个表的函数
    :param    worksheet:  准备写入的excel表
    :param    cursor:     源数据的数据库游标
    :param    table       源数据的数据表
    :return:  Nove.
    """
    # 首先向excel表中写入数据表的字段
    column_count = cursor.execute("desc %s"%table)
    for i in range(column_count):
       temptuple = cursor.fetchone()
       #print(temptuple[0])
       worksheet.cell(1, i+1, temptuple[0])

    # 向构建好字段的excel表写入所有的数据记录
    row_count = cursor.execute("select * from %s"%table)
    for i in range(row_count):
        temptuple = cursor.fetchone()
        for j in range(column_count):
            worksheet.cell(i + 1, j+1, temptuple[j])


#workbook = xlwt.Workbook()
workbook = openpyxl.Workbook()
worksheet = workbook.create_sheet("sheet1",0)
localtime = time.localtime(time.time())#获取当前时间
time = time.strftime("%Y%m%d%H%M%S",time.localtime(time.time()))
connect = pymysql.connect(
             user = \'\',
            password = \'\',
            db = \'\',
            host = \'\',
            port = 3306,
            charset = \'utf8\'
            )
cursor = connect.cursor()

export_to_excel(worksheet, cursor, \'xinxi\')

cursor.close()
connect.close()

workbook.save(time+".xls")

 

VB中从SQL Server到Excel的海量数据导出

【中文标题】VB中从SQL Server到Excel的海量数据导出【英文标题】:Mass data export from SQL Server to Excel in VB 【发布时间】:2013-12-20 20:31:08 【问题描述】:

我有一些适用于较小数据集的代码。我使用的大量数据集(800k 行,25 列)出现“内存不足”错误。我试图找出一种方法来将其更改为逐列批量导出,或者可能拆分多组行,而不是一次全部导出。

显然它无法处理那么多数据。我无法弄清楚如何将它分开一些。有任何想法吗?谢谢!

For Each dt As System.Data.DataTable In ds.Tables
        ' Copy the DataTable to an object array
        Dim rawData(dt.Rows.Count, dt.Columns.Count - 1) As Object

        ' Copy the column names to the first row of the object array
        For col = 0 To dt.Columns.Count - 1
            rawData(0, col) = dt.Columns(col).ColumnName
        Next

        ' Copy the values to the object array
        For col = 0 To dt.Columns.Count - 1
            For row = 0 To dt.Rows.Count - 1
                rawData(row + 1, col) = dt.Rows(row).ItemArray(col)
            Next
        Next

        ' Calculate the final column letter
        Dim finalColLetter As String = String.Empty
        Dim colCharset As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        Dim colCharsetLen As Integer = colCharset.Length

        If dt.Columns.Count > colCharsetLen Then
            finalColLetter = colCharset.Substring( _
             (dt.Columns.Count - 1) \ colCharsetLen - 1, 1)
        End If

        finalColLetter += colCharset.Substring( _
          (dt.Columns.Count - 1) Mod colCharsetLen, 1)

        ' Fast data export to Excel
        Dim excelRange As String = String.Format("A1:01", finalColLetter, dt.Rows.Count + 1)
        excelSheet.Range(excelRange, Type.Missing).Value2 = rawData

        excelSheet = Nothing
    Next

【问题讨论】:

EPplus 是很好的解决方案。你试过了吗?如果您在 .net 中使用 excel 对象,那么它肯定会给您带来内存不足的异常。最好尝试使用一些开源 dll。请参考链接epplus.codeplex.com。你可能会知道它是如何工作的!它使用您项目中上传的模板文件并将其复制到新的模板文件中并将数据表转储到新创建的excel文件中。 有什么理由不使用可以从代码运行的 SSIS? 【参考方案1】:

还有其他操作 Excel 电子表格的代码吗?如果没有,将其写入 CSV 格式的平面文本文件可能会更快。 Excel 将打开 CSV 并像普通电子表格一样显示它。

【讨论】:

到目前为止,没有。不能说我知道如何导出为 csv,但我会调查一下。 看起来他期望(或允许)数据集中的多个表。这意味着多个 csv 文件,其中 excel 可以在一个工作簿中完成所有这些操作。 @JoelCoehoorn 是的,可能是这样,我不确定。此外,如果有多个 DataTable,则上面的代码中可能存在潜在错误。您将 excelSheet 设置为 Nothing,但您永远不会在下一个 for 循环中重新创建它。在 VB.Net 中搜索从 DataTable 写入 CSV 文件的示例代码,您会发现很多。

以上是关于MYSQL海量数据导出到EXCEL的主要内容,如果未能解决你的问题,请参考以下文章

海量excel数据导出方案解决 xlswriter性能测试

JSP页面将数据从mysql导出到excel的Java代码

解决Java POI导出海量Excel数据内存溢出

海量数据下如何使用多线程的导出 Excel

怎样将MySQL数据导出到Excel表中

怎样将MySQL数据导出到Excel表中