📜  在Python中使用异步数据库对 Postgres 进行 CRUD 操作(1)

📅  最后修改于: 2023-12-03 15:07:55.368000             🧑  作者: Mango

在Python中使用异步数据库对 Postgres 进行 CRUD 操作

介绍

在Python中,我们常常需要对数据库进行CRUD操作(增加、查询、更新、删除)。通常我们会使用SQLAlchemy等ORM库对数据库进行操作,而在异步编程中,我们还可以使用异步数据库来实现这些操作,从而提高程序的性能和效率。

本文将介绍如何在Python中使用异步数据库对PostgreSQL进行CRUD操作,包括连接数据库、创建表、插入数据、查询数据、更新数据和删除数据等操作。

准备工作

在开始之前,需要先安装以下几个库:

  • asyncpg:异步PostgreSQL数据库库;
  • asyncio:Python3.5及以上版本自带异步编程库;
  • os、dotenv:环境变量管理库;
  • logging:日志记录库。

可以使用以下命令进行安装:

pip install asyncpg asyncio os dotenv logging
连接数据库

使用异步数据库连接PostgreSQL需要使用asyncpg库中提供的connect函数。首先,在代码中导入库:

import os
import asyncpg
from dotenv import load_dotenv

其中,os库用来管理环境变量,dotenv用来从 .env 文件中加载环境变量。

然后,在代码中使用以下代码来连接数据库:

load_dotenv()

DB_NAME = os.getenv("DB_NAME")
DB_USER = os.getenv("DB_USER")
DB_PASSWORD = os.getenv("DB_PASSWORD")
DB_HOST = os.getenv("DB_HOST")
DB_PORT = os.getenv("DB_PORT")

async def create_pool():
    return await asyncpg.create_pool(dsn=f"postgres://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}")

以上代码中,load_dotenv函数从 .env 文件中加载环境变量,然后将这些环境变量赋值给变量DB_NAME、DB_USER、DB_PASSWORD、DB_HOST和DB_PORT。最后,我们使用asyncpg库的create_pool函数来创建一个连接池。

创建表

创建表是需要进行的一个重要操作。在异步数据库中,我们可以使用以下代码来创建一个表:

async def create_table():
    async with create_pool() as pool:
        async with pool.acquire() as conn:
            async with conn.transaction():
                await conn.execute("""CREATE TABLE users (
                                     id SERIAL PRIMARY KEY,
                                     name varchar(50) NOT NULL,
                                     age integer,
                                     email varchar(50) UNIQUE NOT NULL,
                                     created_on timestamptz DEFAULT now(),
                                     active boolean DEFAULT true
                                     );""")

以上代码中,我们在create_table函数中使用async with语句来创建一个连接池和一个连接。接着,在connection的transaction中,我们使用execute函数来执行SQL语句,创建了一个名为users的表,这个表包含了五个字段:id、name、age、email和created_on。

插入数据

插入数据也是数据库操作中的重要操作之一。在异步数据库中,我们可以使用以下代码来插入一条数据:

async def insert_data(name, age, email):
    async with create_pool() as pool:
        async with pool.acquire() as conn:
            async with conn.transaction():
                await conn.execute("INSERT INTO users (name, age, email) VALUES ($1, $2, $3)", name, age, email)

以上代码中,我们使用execute函数来执行SQL语句,将name、age和email三个参数插入到users表中。

查询数据

查询数据是在开发中经常需要进行的操作之一。在异步数据库中,我们可以使用以下代码来查询users表中的数据:

async def select_data(email):
    async with create_pool() as pool:
        async with pool.acquire() as conn:
            async with conn.transaction():
                return await conn.fetchrow("SELECT * FROM users WHERE email=$1", email)

以上代码中,我们使用fetchrow函数来执行SQL语句,查询符合条件的用户数据,并将结果返回。

更新数据

更新数据是数据库操作中的一项重要操作。在异步数据库中,我们可以使用以下代码来更新users表中的数据:

async def update_data(email, name):
    async with create_pool() as pool:
        async with pool.acquire() as conn:
            async with conn.transaction():
                await conn.execute("""UPDATE users 
                                      SET name=$1 
                                      WHERE email=$2""", name, email)

以上代码中,我们使用execute函数来执行SQL语句,更新符合条件的用户数据。

删除数据

删除数据也是数据库操作中的一项重要操作。在异步数据库中,我们可以使用以下代码来删除users表中的数据:

async def delete_data(email):
    async with create_pool() as pool:
        async with pool.acquire() as conn:
            async with conn.transaction():
                await conn.execute("DELETE FROM users WHERE email=$1", email)

以上代码中,我们使用execute函数来执行SQL语句,删除符合条件的用户数据。

总结

本文介绍了在Python中使用异步数据库对PostgreSQL进行CRUD操作的方法,包括连接数据库、创建表、插入数据、查询数据、更新数据和删除数据等操作。异步数据库是异步编程的重要组成部分,可以更好地发挥异步编程的性能和效率优势。