You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

88 lines
2.1 KiB

import pymysql
from fastapi import HTTPException, status
DB_CONFIG = {
"host": "www.wuruilin.cn",
"user": "root",
"password": "zl981023",
"database": "blogapi",
"charset": "utf8mb4",
"cursorclass": pymysql.cursors.DictCursor,
}
# 创建数据库连接
def create_connection():
return pymysql.connect(**DB_CONFIG)
# 执行 SQL 查询
def execute_query(query, params=None, fetchall=False,lastrowid=False):
conn = create_connection()
with conn.cursor() as cursor:
cursor.execute(query, params)
if fetchall:
result = cursor.fetchall()
elif lastrowid:
result = cursor.lastrowid
else:
result = cursor.fetchone()
conn.commit()
conn.close()
return result
# 查询单个数据
def fetch_one(query, params=None):
result = execute_query(query, params)
return result if result else None
# 查询所有数据
def fetch_all(query, params=None, fetchall=True):
return execute_query(query, params, fetchall)
# 验证数据是否存在,不存在抛出异常
def raise_if_not_found(item, message="Item not found"):
if not item:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail=message
)
# 验证唯一,非唯一抛出异常
def raise_if_exists(item, message="Item already exists"):
if item:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail=message
)
# 成功响应数据
def response_success(data={}, message="data do success"):
if data is None:
# 如果 data 未传递,返回无 data 的响应
return {
"status": status.HTTP_200_OK,
"message": message,
}
elif not data:
# 如果 data 传递了但是为空,返回空列表作为 data 的响应
return {
"status": status.HTTP_200_OK,
"message": message,
"data": []
}
else:
# 如果 data 非空,返回包含 data 的响应
return {
"status": status.HTTP_200_OK,
"message": message,
"data": data
}