如何将Python连接到PostgreSQL

6 投票
4 回答
16464 浏览
提问于 2025-04-28 21:43

我在网上搜索时,发现了关于PyGreSQL库的文档,这个库可以帮助我把Python和Postgres连接起来。

不过,我找不到任何地方可以下载这个包。即使是这个文档:http://www.pygresql.org/install.html

里面提到了下载Windows安装程序等等,但没有说明从哪里下载。

我想让这个连接在Python 2.7上工作。

暂无标签

4 个回答

2

Python中那些不是标准库的一部分的模块,可以在pypi网站上找到,地址是 https://pypi.python.org。比如说,pygresql这个模块就可以在这个页面找到:https://pypi.python.org/pypi/PyGreSQL/

在这个页面上,你还可以看到这个包最后一次更新的时间(在这个例子中是2013年),所以你也可以选择其他的,比如psycopg2,用来通过Python连接PostgreSQL数据库,链接是 https://pypi.python.org/pypi/psycopg2

4

如果你在Docker中使用PostgreSQL,比如说

docker pull postgres

mkdir -p $HOME/docker/volumes/postgres

docker run --rm --name pg-docker -e POSTGRES_PASSWORD=docker -d -p 5432:5432 -v $HOME/docker/volumes/postgres:/var/lib/postgresql/data postgres

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
850f9ee04731        postgres            "docker-entrypoint.s…"   44 hours ago        Up 44 hours         0.0.0.0:5432->5432/tcp   pg-docker

你不需要安装psycopg2,对于这种情况,你可以安装psycopg2-binary

pip install psycopg2-binary

之后可以像这样使用

import psycopg2

connection = psycopg2.connect(database="postgres", user='postgres', password='docker', host="localhost", port=5432)

cursor = connection.cursor()

sql_context ="""
select 
    *
from 
    public.metrics sm
where 
    sm.metric_name not like '%test%'
group by 
    sm.metric_name
"""


cursor.execute(sql_context)

# Fetch all rows from database
record = cursor.fetchall()

print("Data from Database:- ", record)
8

第一步:用命令安装一个叫做 psycopg2 的工具,方法是输入 pip install psycopg2。

第二步:使用下面的代码:

import psycopg2

connection = psycopg2.connect(database="dbname", user="username", password="pass", host="hostname", port=5432)

cursor = connection.cursor()

cursor.execute("SELECT * from portal.portal_users;")

# Fetch all rows from database
record = cursor.fetchall()

print("Data from Database:- ", record)
2

从Python连接PostgreSQL数据库,最经典、文档最齐全的库可能就是 psycopg2,你可以在Windows上这里下载。如果你特别想要使用PyGreSQL,可以在这里找到下载页面。

撰写回答