【问题标题】:Psycopg2 and sqlalchemy both not working to pull data from a local PostgreSQL databasePsycopg2 和 sqlalchemy 都无法从本地 PostgreSQL 数据库中提取数据
【发布时间】:2021-08-07 16:00:59
【问题描述】:

我有点麻烦。我尝试使用 psycopg2 和 sqlalchemy 进入我的本地 PostgreSQL 数据库,虽然它没有抛出错误,但它不会建立连接。相反,它只是卡在执行代码。这就是问题所在。

conn = psycopg2.connect(database='db', user="user", password="password", host="127.0.0.1", port="55212")

同样,在这里使用 sqlalchemy 时会出错。

engine = create_engine('postgresql://pw:db@localhost:55212/DB')

请帮忙,在这个问题解决之前我什么都做不了!

【问题讨论】:

  • 可能是服务器没有激活,还是防火墙?为什么每次尝试都使用不同的端口?
  • 我要编辑问题。我正在使用相同的端口。也许如果我连接到 VPN 它会工作。我现在就试试。
  • 所以我尝试连接到 VPN,但这也不起作用。我不知道它是否是防火墙,但这听起来很有希望。你能帮我弄清楚如何解决它,以便我检查是否是问题所在?
  • 您确定您使用的是正确的端口吗? 5432 是默认值。
  • 这是进入 pgadmin 的 url:127.0.0.1:55212/browser

标签: python postgresql sqlalchemy psycopg2


【解决方案1】:

没有看到日志,只能猜测。 但基本上,当使用sqlalchemy 时,您传递给create_engine 的连接字符串应如下所示:"postgresql+psycopg2://user_name:password@host_address:port/schema"。 如果您传递的数据正确,请确保您的数据库服务器已打开连接。 如果您尝试从不同的 docker 容器中连接到 docker 容器,请确保它们共享网络,并将 host_address 从 localhost 更改为容器的名称。

PostgreSQL 的默认端口是5432,因此在尝试其他端口之前请确定要使用的端口。 创建Engine 后,使用engine.connect() 连接到数据库,这将返回一个连接(最好使用上下文管理器)。

然后您可以将该连接用于execute 查询或将其传递给pandas read_sql_query 方法。

【讨论】:

  • 这似乎奏效了。你能告诉我为什么这个 sql 查询现在没有执行吗? df = pd.read_sql_query("SELECT * FROM public.TestDataFlow_SLG LIMIT 1000",con=engine) 我需要指定游标吗?我不知道它是否真的有效,但它允许我创建引擎......
  • 首先,请在询问时提供更多信息,例如日志,这样会更容易为您提供帮助。其次 - 我对 pandas read_sql_query 不是很熟悉,但似乎 con 参数需要连接,而不是引擎(这是 create_engine 返回的内容)。使用con = engine.connect(),然后将其传递给read_sql_query
  • 知道了。我将编辑您的答案并将其标记为正确。
猜你喜欢
  • 2011-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-02
  • 1970-01-01
  • 1970-01-01
  • 2020-11-05
  • 1970-01-01
相关资源
最近更新 更多