加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

加入所有PostgreSQL表并制作Python字典

发布时间:2020-12-13 16:09:15 所属栏目:百科 来源:网络整理
导读:我需要加入所有PostgreSQL表并将它们转换为 Python字典.数据库中有72个表.列总数大于1600. 我编写了一个简单的Python脚本,它连接了几个表但由于the memory error而无法加入所有表.在脚本执行期间所有内存都被占用.我在一个具有128GB RAM和8个CPU的新虚拟服务
我需要加入所有PostgreSQL表并将它们转换为 Python字典.数据库中有72个表.列总数大于1600.

我编写了一个简单的Python脚本,它连接了几个表但由于the memory error而无法加入所有表.在脚本执行期间所有内存都被占用.我在一个具有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用于我的目的吗?有更好的解决方案吗?

最终目标是将denormalize DB数据作为文档索引到Elasticsearch,每个用户一个文档.

解决方法

为什么不创建postgres函数而不是脚本?

以下是一些可以帮助您避免内存错误的建议:

>您可以使用WITH子句来更好地利用您的记忆.>您可以创建一些物理表来存储信息数据库的不同表组.这些物理表将避免使用大量内存.之后,您所要做的就是只加入那些物理表.您可以为它创建一个功能.>您可以通过对所需表格进行非规范化来创建数据仓库.>最后但并非最不重要:确保您正确使用索引.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读