【问题标题】:Having a problem with the connection between a python app and postgres db running in docker在 docker 中运行的 python 应用程序和 postgres db 之间的连接有问题
【发布时间】:2020-01-22 20:56:52
【问题描述】:

我在尝试对 Docker 中运行的 postgres 数据库进行查询时遇到问题。

据我所知,数据库正在使用 psycopg2 库正确连接。

但是,当我执行命令并尝试获取结果时,结果为空。我可以使用 psql 在命令行中进行相同的查询,并得到预期的结果。

谁能帮我弄清楚我做错了什么?

con = psycopg2.connect(
   host= 'localhost',
   port= '5432',
   database= 'daystarr',
   user= 'postgres',
   password= 'admin',
)

print('Connected to Postgres Database')

cur = con.cursor()
cur.execute('SELECT * FROM tickets')

rows = cur.fetchall()
for r in rows:
   print(r)

print(cur.fetchone())
cur.close()
con.close()

这是我在命令行中运行时的结果:

cur.fetchall() 返回nothingcur.fetchone() 返回None

另一件事是当我尝试执行命令CREATE TABLE tickets (ticket_id INT PRIMARY KEY;)

我收到重复表错误。所以它必须连接到表。提前致谢!

这是我刚刚print(cur.fetchall())时的样子:

【问题讨论】:

    标签: python postgresql docker


    【解决方案1】:

    好的,这是一个奇怪的边缘案例,但如果你以后再看这个,我会发现问题所在。我安装了一个 PostgreSQL 版本,显然正在监听端口 5432。我的 docker 容器也暴露了这个端口。所以基本上我的应用程序必须优先考虑我的本地机器安装。我从本地机器上卸载了 PostgreSQL,它立即找到了 Docker 容器。感谢任何帮助过的人。

    【讨论】:

      【解决方案2】:

      您的查询中缺少;,应该是

      cur.execute("SELECT * FROM tickets;")
      

      【讨论】:

      • 哎呀,我确实错过了,但我得到了相同的结果。谢谢。
      • 在查询中尝试使用双引号而不是单引号
      • 使用双引号的同样问题。
      • 我在尝试创建表时添加了错误。只是尝试查询表时没有错误。
      • 打印 cur.fetchall() 响应,你应该得到类似这样的结果 ` >>> cur.fetchall() [(6, 42, 'foo'), (7, 74, 'bar ')] ` 我也会尝试用 fetchone() 替换,以调试问题
      猜你喜欢
      • 2018-09-19
      • 2018-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-15
      • 2017-12-16
      • 1970-01-01
      相关资源
      最近更新 更多