【问题标题】:Testing the connection of Postgres-DB测试 Postgres-DB 的连接
【发布时间】:2017-01-30 15:46:57
【问题描述】:

如果软件连接到特定的 Postgre-DB,我想在 GUI 上放置一个按钮。我写了一个小测试函数:如果它可以连接到数据库,则返回 True,否则返回 False。

代码有效,但有一个问题:如果没有连接(我只是拔出互联网电缆,没有其他变化),它只是 需要太多时间。 如果没有连接,您能帮我加快代码速度吗?

这是我的简单测试功能:

import psycopg2

def postgres_test():

    try:
        conn = psycopg2.connect("dbname='mydb' user='myuser' host='my_ip' password='mypassword'")
        conn.close()
        return True
    except:
        return False

【问题讨论】:

  • 如果超时是连接不上的可能原因,恐怕你也不能做得更好,只能等到超时结束。
  • 看来您可以将超时时间(以秒为单位)传递给您对connect() 的调用,如此处所述postgresql.org/docs/current/static/…。这会满足您的需求吗?

标签: python postgresql psycopg2


【解决方案1】:

感谢 cmets。是的,它与超时有关。

这是我更快的代码:

import psycopg2

def postgres_test():

    try:
        conn = psycopg2.connect("dbname='mydb' user='myuser' host='my_ip' password='mypassword' connect_timeout=1 ")
        conn.close()
        return True
    except:
        return False

【讨论】:

  • 如果连接延迟某天,这可能会产生误报。在任何情况下,用户都可以再次按下该按钮进行仔细检查。在实践中,如果数据库是本地的,那么答案应该很快,因此不太可能出现误报。您可以接受自己的答案。
【解决方案2】:

为了测试 postgres 与 python 的连接,首先你必须安装这个包:

pip install psycopg2-binary

试试这个代码:

import psycopg2

conn = psycopg2.connect(dbname="db_name",
                        user="user_name",
                        host="127.0.0.1",
                        password="******",
                        port="5432")
cursor = conn.cursor()
cursor.execute('SELECT * FROM information_schema.tables')
rows = cursor.fetchall()
for table in rows:
    print(table)
conn.close()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-05
    • 2021-10-31
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    相关资源
    最近更新 更多