python中的Postgres数据库连接

时间:2019-09-18 04:07:26

标签: python postgresql putty

如何使用python访问Linux服务器上的postgre数据库? 我已经用腻子终端访问了它,但是我需要通过python访问数据库中的表,但我无法做到这一点。

2 个答案:

答案 0 :(得分:2)

#!/usr/bin/env python3
import sys
import psycopg2

try:
    conn = psycopg2.connect("dbname='dbname' user='dbuser' host='localhost' port='5432' password='dbpass'")
except psycopg2.DatabaseError:
    sys.exit('Failed to connect to database')


try:
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM test_table WHERE id < 10000")
    dbRecord = cursor.fetchone()

    if dbRecord == None:
        print('ERROR: First record not found', file=sys.stderr)
    else:
        print('Loaded {}'.format(dbRecord))
    dbRecordId = dbRecord[0]

    conn.commit()
    cursor.close()
except (Exception, psycopg2.DatabaseError) as error:
    print(error)
finally:
    if conn is not None:
        conn.close()

此外,您可能需要允许在postgres中进行访问。要允许用户使用登录名/密码对取消注释而连接到服务器,或在pg_hba.conf中添加以下行(通常位于/etc/postgresql/{postgres_version}/main/pg_hba.conf中):

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

编辑:哦,我刚刚意识到您的postgres服务器位于远程计算机上。以下选项可能适用:

  • 将您的IP添加到上面的pg_hba.conf配置中,然后在脚本中将host='localhost'更改为host='your.server.address.or.ip'。或:
  • 使用ssh port forwarding可以访问本地计算机上远程服务器的5432端口。在这种情况下,请将localhost留在脚本中。

后者可能是最干净,最快的选择,因为您似乎已经具有ssh访问权限,并且无需以这种方式弄乱数据库配置。此外,可能不允许您更改配置。

答案 1 :(得分:-1)

要将PostgreSQL与python连接,需要安装psycopg2模块。此外,还有其他一些模块,例如bpgsql,ocpgdb,PyGreSQL

安装psycopg2

pip安装psycopg2

您还可以使用以下命令安装特定版本。

pip install psycopg2 = 2.7.5

连接PostgreSQL数据库,并对要连接的数据库名称执行SQL查询。 从Python连接到PostgreSQL后,您应该获得以下输出

You are connected to -  ('PostgreSQL 10.3')
PostgreSQL connection is closed

请参阅此链接以获取完整指南: https://pynative.com/python-postgresql-tutorial/#targetText=Use%20the%20connect()%20method,connection%20after%20your%20work%20completes