寻找关于如何解决我的特定问题的建议(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文件或类似的文件中——有没有更直接的方法来处理这个问题?在