当前位置: 首页 > 面试题库 >

连接所有PostgreSQL表并创建一个Python字典

司马羽
2023-03-14
问题内容

我需要加入 所有 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函数而不是脚本?

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

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


 类似资料:
  • 本文向大家介绍postgresql 创建一个纯JSON表,包括了postgresql 创建一个纯JSON表的使用技巧和注意事项,需要的朋友参考一下 示例 要创建纯JSON表,您需要提供一个类型为的字段JSONB: 您还应该创建一个基本索引: 此时,您可以将数据插入表中并进行有效查询。

  • 问题内容: 我有一个名为的表,我想对它们进行排序,以表最填写的顺序。每个列都是JSONB列或TEXT列。我并不需要很确定,因此通常我按以下顺序订购: 但是,这很慢,因此我想创建一个索引。但是,这不起作用: 也没有 不能说我很惊讶。声明此索引的正确方法是什么? 问题答案: 要测量文本表示形式中行的大小,您可以将整个行都转换为文本,这比连接单个列要快得多: 但是索引中的此表达式存在3(或4)个问题:

  • 如何创建将不同列与不同表合并的视图?例如,我有三个表:用户、物品和礼物(在本例中,这是一个用户可以向另一个用户赠送礼物的系统) < code>users表包含有关用户的信息,< code>items表包含有关项目的信息,< code>gifts表显示哪个用户向哪个用户发送了什么礼物。 我想要的是创建如下视图:

  • PostgreSQL 使用 CREATE TABLE 语句来创建数据库表格。 语法 CREATE TABLE 语法格式如下: CREATE TABLE 是一个关键词,用于告诉数据库系统将创建一个数据表。 表名字必需在同一模式中的其它表、 序列、索引、视图或外部表名字中唯一。 CREATE TABLE 在当前数据库创建一个新的空白表,该表将由发出此命令的用户所拥有。 表格中的每个字段都会定义数据类型

  • 问题内容: 我有两个要从中提取数据的表。这是我所拥有的最小的娱乐: 因此,发生的事情是我最终要为每个Job_Number的每个不同的Charge_Code和Charge_Amount获取一行。该行上的其他所有内容都相同。是否有可能使它返回更类似的内容: 等等? 这样,它就为每个职位编号创建了一行,并且每个相关的费用和金额都在同一行上。我一直在阅读W3,但无法确切地说出这是否可行。有什么帮助,谢谢!

  • 我在Python中制作了一个游戏服务器,它使用心理学2连接到PostgreSQL数据库。我看到的例子,我看到当一个连接到一个数据库被创建,应该关闭连接时完成查询,例如每个客户端: 好的,当我启动服务器时,我有: 在我的课堂里 也就是说,我对来自所有客户的所有查询使用相同的连接对象,并且从不关闭连接,这看起来比为每个客户打开和关闭连接要好,我的服务器显然工作得很好。你想到这个了吗?这个做得好吗?不做