如何将pandas DataFrame传递给PostgreSQL函数(存储过程)?

bihw5rsg  于 2023-10-14  发布在  PostgreSQL
关注(0)|答案(1)|浏览(152)

有什么想法可以从Python中将数据存储到PostgreSQL存储的proc / function中吗?
我有一个从其他数据源构建的DataFrame,我需要用PostgreSQL做一些工作,然后在查询成功的情况下在PostgreSQL中更新/更新一些数据。我知道我可以在Python字符串中使用Python和原始SQL查询并在需要的地方插入变量,但我知道这是一个糟糕的做法。
在过去,我已经能够使用MS SQL Server和用户定义的表类型将C# DataTable从C#传递到SQL存储过程。有没有一种方法可以在PostgreSQL中对Python DataFrames做类似的事情?
This link在Python变量到Postgres函数的语法上确实很有帮助,但我还没有看到任何关于将Pandas DataFrames传递给PostgreSQL函数的内容。这可能吗?我是否应该使用不同的设计模式?

rm5edbpk

rm5edbpk1#

下面是一个PostgreSQL函数中的代码示例,使用Python从表中检索数据,操作它们并返回它们。正确的方法是使用扩展plpy的内置连接器,这是一个本地连接运行时。

CREATE OR REPLACE FUNCTION public.plpy_func_simple(
    )
    RETURNS TABLE(key numeric, value numeric) 
    LANGUAGE 'plpython3u'
    COST 100
    VOLATILE PARALLEL UNSAFE
    ROWS 1000

AS $BODY$
  import pandas as pd
  
  data_lt = plpy.execute('SELECT "key", "value" FROM public."<your-table>" ORDER BY "key"'); #PLyResult --> List or Dictionary
  data_df_x = pd.DataFrame.from_records(data_lt)['key'];
  data_df_y = pd.DataFrame.from_records(data_lt)['value'];
  df = pd.concat([data_df_x, data_df_y], axis=1).values
  
  return df;
$BODY$;

相关问题