以下是使用aiomysql接口封装一个数据库的类的Python代码示例:

import aiomysql

class Database:
    def __init__(self, host, port, user, password, db):
        self.host = host
        self.port = port
        self.user = user
        self.password = password
        self.db = db
        self.pool = None

    async def connect(self):
        self.pool = await aiomysql.create_pool(
            host=self.host,
            port=self.port,
            user=self.user,
            password=self.password,
            db=self.db,
            autocommit=True
        )

    async def close(self):
        self.pool.close()
        await self.pool.wait_closed()

    async def create_table(self, table_name, fields):
        async with self.pool.acquire() as conn:
            async with conn.cursor() as cur:
                sql = f"CREATE TABLE IF NOT EXISTS {table_name} ({fields})"
                await cur.execute(sql)

    async def insert_data(self, table_name, data):
        keys = ",".join(data.keys())
        values = ",".join([f"'{v}'" for v in data.values()])
        async with self.pool.acquire() as conn:
            async with conn.cursor() as cur:
                sql = f"INSERT INTO {table_name} ({keys}) VALUES ({values})"
                await cur.execute(sql)

    async def update_data(self, table_name, data, condition):
        set_clause = ",".join([f"{k}='{v}'" for k, v in data.items()])
        async with self.pool.acquire() as conn:
            async with conn.cursor() as cur:
                sql = f"UPDATE {table_name} SET {set_clause} WHERE {condition}"
                await cur.execute(sql)

    async def select_data(self, table_name, fields=None, condition=None):
        if fields is None:
            fields = "*"
        if condition is None:
            condition = "1=1"
        async with self.pool.acquire() as conn:
            async with conn.cursor() as cur:
                sql = f"SELECT {fields} FROM {table_name} WHERE {condition}"
                await cur.execute(sql)
                result = await cur.fetchall()
                return result

这个类使用了async/await语法,可以异步地执行数据库操作。其中:

  • __init__方法初始化数据库连接参数和连接池对象。
  • connect方法用于建立与数据库的连接池。
  • close方法用于关闭连接池。
  • create_table方法用于创建表。参数table_name是表名,fields是字段名和类型的字符串,例如"id INT PRIMARY KEY, name VARCHAR(50)"
  • insert_data方法用于插入数据。参数table_name是表名,data是一个字典,包含要插入的数据。
  • update_data方法用于更新数据。参数table_name是表名,data是一个字典,包含要更新的数据,condition是一个字符串,表示更新条件。
  • select_data方法用于查询数据。参数table_name是表名,fields是一个字符串,表示要查询的字段,condition是一个字符串,表示查询条件。如果fieldscondition都不指定,则查询所有数据。

使用这个类可以更加方便地进行数据库操作,例如:

db = Database(host="localhost", port=3306, user="root", password="123456", db="test")
await db.connect()

# 创建表
await db.create_table("users", "id INT PRIMARY KEY, name VARCHAR(50), age INT")

# 插入数据
await db.insert_data("users", {"id": 1, "name": "Alice", "age": 18})
await db.insert_data("users", {"id": 2, "name": "Bob", "age": 20})

# 更新数据
await db.update_data("users", {"age": 21}, "name='Bob'")

# 查询数据
result = await db.select_data("users", "name, age", "age>=18")
print(result)  # [("Alice", 18), ("Bob", 21)]

await db.close()
使用aiomysql接口封装一个数据库的类。包含创建表更新数据查询数据插入数据等接口函数只需要提供表名、字段、数据自动完成sql语句的拼接。-请用Python表示

原文地址: https://www.cveoy.top/t/topic/ggo 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录