python从数据库读取大量数据_从Access数据库读取大量数据

本文介绍了在Python中使用pyodbc从Access数据库读取大量数据时遇到MemoryError的问题。作者通过get_schema函数获取数据库表结构,然后在get_table_data函数中尝试获取所有数据,导致内存溢出。为了解决这个问题,可以考虑分批读取数据、增加内存分配或直接将数据导出到CSV文件。寻求解决方案,如分块处理数据并保存到磁盘。
摘要由CSDN通过智能技术生成

寻找关于如何解决我的特定问题的建议(MemoryError,因为在一个变量中存储了太多信息),以及关于解决问题的不同方法的一般建议。在

我有一个access1997数据库,我正试图从中提取数据。因为我已经安装了access2013,所以如果不下载access2003,我就无法打开数据库。没问题——我可以使用pyodbc和Jet使用python进行提取。在

我与数据库建立了pyodbc游标连接,并编写了以下函数,首先查询所有表名,然后查询与这些表关联的所有列:def get_schema(cursor):

"""

:param cursor: Cursor object to database

:return: Dictionary with table name as key and list of columns as value

"""

db_schema = dict()

tbls = cursor.tables().fetchall()

for tbl in tbls:

if tbl not in db_schema:

db_schema[tbl] = list()

column_names = list()

for col in cursor.columns(table=tbl):

column_names.append(col[3])

db_schema[tbl].append(tuple(column_names))

return db_schema

我得到的变量如下所示:

^{pr2}$

然后,我将该模式变量传递给另一个函数,将每个表中的数据转储到元组列表中:def get_table_data(cursor, schema):

for tbl, cols in schema.items():

sql = "SELECT * from %s" % tbl # Dump data

cursor.execute(sql)

col_data = cursor.fetchall()

for row in col_data:

cols.append(row)

return schema

但是,当我试图读取返回的变量时,我得到以下结果:>>> schema2 = get_table_data(cursor, schema)

>>> schema2

Traceback (most recent call last):

File "", line 1, in

MemoryError

当数据变得太大而无法读取时,有没有办法开始在另一个变量中存储数据?或者增加内存分配的方法?最后,我想把它转储到一个csv文件或类似的文件中——有没有更直接的方法来处理这个问题?在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值