PostgreSQL – 用Python连接到 PostgreSQL 数据库服务器
psycopg数据库适配器用于通过Python与 PostgreSQL 数据库服务器连接。
安装 psycopg:
首先,从终端使用以下命令行:
pip install psycopg
如果你已经将源码包下载到你的电脑中,你可以使用 setup.py 如下:
python setup.py build
sudo python setup.py install
创建一个新数据库
首先,使用任何客户端工具(例如 pgAdmin 或 psql)登录 PostgreSQL 数据库服务器。
其次,使用以下语句在 PostgreSQL 数据库服务器中创建一个名为 providers 的新数据库。
CREATE DATABASE suppliers;
使用 psycopg2 连接到 PostgreSQL 数据库
要连接到供应商数据库,请使用 psycopg2 模块的 connect()函数。
connect()函数创建一个新的数据库会话并返回连接类的一个新实例。通过使用连接对象,您可以创建一个新游标来执行任何 SQL 语句。
要调用 connect()函数,请将 PostgreSQL 数据库参数指定为连接字符串,并将其传递给函数,如下所示:
conn = psycopg2.connect("dbname=suppliers user=postgres password=postgres")
或者您可以使用关键字参数列表:
conn = psycopg2.connect(
host="localhost",
database="suppliers",
user="postgres",
password="Abcd1234")
以下是连接参数列表:
数据库:要连接的数据库的名称。
user:用于认证的用户名。
密码:用于认证的密码。
主机:数据库服务器地址,例如本地主机或 IP 地址。
port:如果不提供,默认为 5432 的端口号。
为了更方便,您可以使用配置文件来存储所有连接参数。
下面显示了 database.ini 文件的内容:
[postgresql]
host=localhost
database=suppliers
user=postgres
password=SecurePas$1
通过使用 database.ini,您可以在将代码移动到生产环境时更改 PostgreSQL 连接参数,而无需修改代码。
请注意,如果您使用 git,则需要将 database.ini 添加到 .gitignore 文件中,以免将敏感信息提交到 github 等公共 repo。 .gitignore 文件将如下所示:
database.ini
以下 config()函数读取 database.ini 文件并返回连接参数。 config()函数放在 config.py 文件中:
#!/usr/bin/python
from configparser import ConfigParser
def config(filename='database.ini', section='postgresql'):
# create a parser
parser = ConfigParser()
# read config file
parser.read(filename)
# get section, default to postgresql
db = {}
if parser.has_section(section):
params = parser.items(section)
for param in params:
db[param[0]] = param[1]
else:
raise Exception('Section {0} not found in the {1} file'.format(section, filename))
return db
下面的 connect()函数连接到供应商数据库并打印出 PostgreSQL 数据库版本。
#!/usr/bin/python
import psycopg2
from config import config
def connect():
""" Connect to the PostgreSQL database server """
conn = None
try:
# read connection parameters
params = config()
# connect to the PostgreSQL server
print('Connecting to the PostgreSQL database...')
conn = psycopg2.connect(**params)
# create a cursor
cur = conn.cursor()
# execute a statement
print('PostgreSQL database version:')
cur.execute('SELECT version()')
# display the PostgreSQL database server version
db_version = cur.fetchone()
print(db_version)
# close the communication with the PostgreSQL
cur.close()
except (Exception, psycopg2.DatabaseError) as error:
print(error)
finally:
if conn is not None:
conn.close()
print('Database connection closed.')
if __name__ == '__main__':
connect()
这个怎么运作。
首先,从 database.ini 文件中读取数据库连接参数。
接下来,通过调用 connect()函数创建一个新的数据库连接。
然后,创建一个新的游标并执行一条 SQL 语句来获取 PostgreSQL 数据库版本。
之后,通过调用游标对象的 fetchone() 方法读取结果集。
最后,通过调用游标和连接对象的close()方法关闭与数据库服务器的通信。
执行connect.py文件
要执行 connect.py 文件,请使用以下命令:
python connect.py
您将看到以下输出:
Connecting to the PostgreSQL database...
PostgreSQL database version:
('PostgreSQL 12.3, compiled by Visual C++ build 1914, 64-bit', )
Database connection closed.
故障排除
如果发生错误,connect()函数会引发 DatabaseError 异常。要查看它是如何工作的,您可以更改 database.ini 文件中的连接参数。
例如,如果您将主机更改为 localhosts,程序将输出以下消息:
Connecting to the PostgreSQL database...
could not translate host name "localhosts" to address: Unknown host
当您将数据库更改为不存在的数据库(例如供应商)时,以下显示错误消息:
Connecting to the PostgreSQL database...
FATAL: database "supplier" does not exist
如果把用户改成postgress,就不会认证成功,如下:
Connecting to the PostgreSQL database...
FATAL: password authentication failed for user "postgress"