srg*_*bnd 5 python database postgresql elasticsearch pandas
我需要加入所有 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))
Run Code Online (Sandbox Code Playgroud)
为我的目的使用熊猫是否可以?有更好的解决方案吗?
最终目标是对DB数据进行非规范化,以便能够将其作为文档索引到Elasticsearch中,每个用户一个文档.
为什么不创建一个 postgres 函数而不是脚本呢?
以下是一些可以帮助您避免内存错误的建议:
| 归档时间: |
|
| 查看次数: |
304 次 |
| 最近记录: |