Python 3 连接 PostgreSQL 数据库

相关文档
使用 psycopg2 库。

简介

Psycopg2 在 C 中作为 libpg 包装器实现的。其兼容 Unicode 和 Python3.

Basic module usage

1
2
3
4
5
6
7
8
9
10
11
import psycopg2

conn = psycopg2.connect("dbname=test user=postgres")
cur = conn.cursor
cur.execute("CREATE TABLE test (id serial PRIMARY KEY, num integer, data varchar);")
cur.execute("INSERT INTO test (num, data) VALUES (%s, %s)", (100, "abc'def"))
cur.execute("SELECT * FROM test;")
cur.fetchone()
conn.commit()
cur.close()
conn.close()

connect() 方法能够创建一个 session, 然后返回一个 connection instance.

connect() 方法的参数:

  • dbname, 数据库名称
  • database, 同样是数据库名称
  • user,用于验证的用户名
  • password, 密码
  • host, 主机地址
  • port, 连接的端口号

使用类似于 connect(host='localhost', database="test", user="postgres")

connection 是一个类,其 cursor() 方法创建一个 cursor instance, 其可用来执行数据库命令和查询。如使用 execute()executemany 方法来执行命令, 用 fetchmany()fetchall()fetchone() 方法来 retrieve data from database。

commit()rollback() 方法用于停止一个 transactions.

Passing parameters to SQL queries

使用 execute() 方法与 %s:

1
2
3
4
5
>>> cur.execute("""
... INSERT INTO some_table (an_int, a_date, a_string)
... VALUES (%s, %s, %s);
... """,
... (10, datetime.date(2005, 11, 18), "O'Reilly"))

可以使用 named arguments %(name)s, 其顺序可以和 VALUES 不同,且可被重复使用:

1
2
3
4
5
>>> cur.execute("""
... INSERT INTO some_table (an_int, a_date, a_string)
... VALUES (%(int)s, %(date)s, %(date)s, %(str)s);
... """,
... {'int': 10, 'str': "O'Reilly", 'date': datetime.date(2005, 11, 18)})

这里的 date 就被使用了两次。且这里用的是字典。

表示 % 需要使用 %%:

1
"SELECT (%s %% 2) = 0 AS even", (10,)

注意第二个参数必须为 sequence, 因此要写为 (10,)[10]

这里的 placeholder 必须是 %s 而不能是其他。

若需要动态查询,需要:

1
2
3
cur.execute(
SQL("INSERT INTO {} VALUES (%s)").format(Identifier('number')),
(10,))

Python 3 连接 PostgreSQL 数据库
http://example.com/2022/08/27/Python-3-连接-PostgreSQL-数据库/
作者
Jie
发布于
2022年8月27日
许可协议