postgresql 正在从jupyter notebook上的postgres数据库中获取数据

jxct1oxe  于 2022-11-23  发布在  PostgreSQL
关注(0)|答案(1)|浏览(210)

我使用此脚本从Postgres DB中获取数据。

POSTGRES_PORT = 'xxxx'
POSTGRES_USERNAME = 'xxx' ## CHANGE THIS TO YOUR PANOPLY/POSTGRES USERNAME
POSTGRES_PASSWORD = 'xxx' ## CHANGE THIS TO YOUR PANOPLY/POSTGRES PASSWORD POSTGRES_DBNAME = 'xxxx' ## CHANGE THIS TO YOUR DATABASE NAME
POSTGRES_DBNAME = 'xxx'

postgres_str = (f'postgresql://{POSTGRES_USERNAME}:{POSTGRES_PASSWORD}@{POSTGRES_ADDRESS}:{POSTGRES_PORT}/{POSTGRES_DBNAME}')
# Create the connection
cnx = create_engine(postgres_str)

当我使用限制时,我可以取回它。

table_name = pd.read_sql_query("""SELECT * FROM public.timeline limit 1000""", cnx)
table_name

当我尝试无限制提取时,出现此错误

“连接失败无法建立与笔记本服务器的连接。笔记本将继续尝试重新连接。请检查网络连接或笔记本服务器配置。"

在这种情况下,你会建议我使用pyspark吗?因为它看起来数据是大数据?
我使用计数,得到“66231781”行。

hm2xizp9

hm2xizp91#

默认情况下,Postgresql的数据库驱动程序使用客户端游标,但您可以使用服务器端游标并将数据成批地流到客户端。下面的代码将按chunksize参数的设置,以1,000行为一批迭代查询结果。您可以调整chunksize的值以满足您的需要。

import pandas as pd
from sqlalchemy import create_engine

engine = create_engine(f"postgresql://{POSTGRES_USERNAME}:{POSTGRES_PASSWORD}@{POSTGRES_ADDRESS}:{POSTGRES_PORT}/{POSTGRES_DBNAME}")

with engine.connect().execution_options(stream_results=True) as conn:
    for chunk_df in pd.read_sql("SELECT * FROM public.timeline", conn, chunksize=1000):
        print(f"Dataframe has {len(chunk_df)} rows.")

相关问题