我需要加入 所有 PostgreSQL表并将它们转换成Python字典。数据库中有72个表。总列数大于 1600 。
我编写了一个简单的Python脚本,该脚本可以联接多个表,但是由于内存错误而无法联接所有表。在脚本执行期间,所有内存均被占用。然后,我在具有 128GB RAM和8个CPU 的新虚拟服务器上运行脚本。在lambda函数执行期间失败。
如何改进以下代码以执行 所有 表联接?
from sqlalchemy import create_engine import pandas as pd auth = 'user:pass' engine = create_engine('postgresql://' + auth + '@host.com:5432/db') sql_tables = ['table0', 'table1', 'table3', ..., 'table72'] df_arr = [] [df_arr.append(pd.read_sql_query('select * from "' + table + '"', con=engine)) for table in sql_tables] df_join = reduce(lambda left, right: pd.merge(left, right, how='outer', on=['USER_ID']), df_arr) raw_dict = pd.DataFrame.to_dict(df_join.where((pd.notnull(df_join)), 'no_data')) print(df_join) print(raw_dict) print(len(df_arr))
可以将Pandas用于我的目的吗?有更好的解决方案吗?
最终目标是对数据库数据进行规范化处理,以便能够将其作为文档索引到Elasticsearch中,每个用户一个文档。
为什么不创建postgres函数而不是脚本?
以下是一些建议,可以帮助您避免内存错误: