为了入门 asyncpg,我们以电商网站的产品数据库为例。我们将用这个例子贯穿全章,演示该领域可能遇到的问题。
第一步是建立数据库连接。本节及后续章节假设你本地已安装默认端口为 5432 的 PostgreSQL,且默认用户 postgres 的密码为 password。
警告:代码示例中硬编码了密码,仅用于教学透明度;但实际项目中绝不能这样做,这违反安全原则。请始终将密码存入环境变量或其他配置机制。
你可以从 https://www.postgresql.org/download/(https://www.postgresql.org/download/) 下载安装 PostgreSQL,选择对应操作系统的版本。也可以考虑使用 Docker 的 PostgreSQL 镜像,详情见 https://hub.docker.com/_/postgres/(https://hub.docker.com/_/postgres/)。
设置好数据库后,安装 asyncpg 库。使用 pip3 安装最新版(写作时为 0.23.0):
pip3 install -Iv asyncpg==0.23.0
安装完成后,导入库并建立连接。asyncpg 提供了 asyncpg.connect 函数。我们用它连接数据库并打印版本号。
列表 5.1 以默认用户连接 PostgreSQL 数据库
import asyncpgimport asyncioasync def main(): connection = await asyncpg.connect(host='127.0.0.1', port=5432, user='postgres', database='postgres', password='password') version = connection.get_server_version() print(f'已连接!PostgreSQL 版本为 {version}') await connection.close()asyncio.run(main())
在上面的代码中,我们以默认的 postgres 用户和 postgres 数据库连接到 PostgreSQL 实例。如果实例正常运行,控制台应该显示类似 "Connected! Postgres version is ServerVersion(major=12, minor=0, micro=3, releaselevel='final', serial=0)" 的信息,表示连接成功。最后用 await connection.close() 关闭连接。
现在我们已经连上了,但数据库还是空的。下一步是创建一个产品数据结构来交互。通过构建这个模式,我们将学习如何用 asyncpg 执行基本查询。