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
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
|
|
}
|