gpt4 book ai didi

python - 加入所有 PostgreSQL 表并制作一个 Python 字典

转载 作者:太空狗 更新时间:2023-10-30 01:27:20 26 4
gpt4 key购买 nike

我需要连接所有 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数据库数据能够将其索引到 Elasticsearch作为文档,每个用户一个文档。

最佳答案

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

这里有一些建议可以帮助您避免内存错误:

  • 您可以使用 WITH 子句来更好地利用您的内存。
  • 您可以创建一些物理表来存储以下信息数据库的不同表组。这些物理表将避免使用大量内存。之后,您所要做的就是仅连接那些物理表。您可以为其创建一个函数。
  • 您可以通过非规范化所需的表来创建数据仓库。
  • 最后但同样重要的是:确保您正确使用索引

关于python - 加入所有 PostgreSQL 表并制作一个 Python 字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39498948/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com