使用aiomysql接口封装一个数据库的类。包含创建表更新数据查询数据插入数据等接口函数只需要提供表名、字段、数据自动完成sql语句的拼接。-请用Python表示
以下是使用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是一个字符串,表示查询条件。如果fields和condition都不指定,则查询所有数据。
使用这个类可以更加方便地进行数据库操作,例如:
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()
原文地址: https://www.cveoy.top/t/topic/ggo 著作权归作者所有。请勿转载和采集!