|
|
3 meses atrás | |
|---|---|---|
| .. | ||
| migrations | 3 meses atrás | |
| README.md | 3 meses atrás | |
| __init__.py | 3 meses atrás | |
| connection.py | 3 meses atrás | |
| example_usage.py | 3 meses atrás | |
| migrations.py | 3 meses atrás | |
| models.py | 3 meses atrás | |
| operations.py | 3 meses atrás | |
数据库模块为AI换脸系统提供完整的数据存储和管理功能,包括:
database/
├── __init__.py # 模块初始化
├── connection.py # 数据库连接管理
├── models.py # 数据模型定义
├── operations.py # CRUD操作封装
├── migrations.py # 数据库迁移
├── migrations/ # 迁移文件目录
│ └── example_migration.json
├── example_usage.py # 使用示例
└── README.md # 说明文档
pip install -r requirements_database.txt
from backend.modules.database import DatabaseMigration
# 初始化数据库
migration = DatabaseMigration()
if migration.init_database():
print("数据库初始化成功")
from backend.modules.database import DatabaseOperations
# 创建数据库操作实例
db_ops = DatabaseOperations()
# 创建用户
user = db_ops.create_user(
username="test_user",
email="test@example.com"
)
# 创建图片记录
image_record = db_ops.create_image_record(
user_id=user.id,
image_type="face",
original_filename="face.jpg",
stored_path="/data/images/face_001.jpg"
)
# 创建处理记录
process_record = db_ops.create_process_record(
user_id=user.id,
face_image_id=image_record.id,
cloth_image_id=cloth_image.id,
prompt="美女站在海边"
)
id - 用户IDusername - 用户名email - 邮箱api_key - API密钥is_active - 是否激活is_admin - 是否管理员id - 图片记录IDuser_id - 用户IDimage_type - 图片类型 (face/cloth/result)original_filename - 原始文件名stored_path - 存储路径file_size - 文件大小image_hash - 图片哈希值id - 处理记录IDuser_id - 用户IDface_image_id - 人脸图片IDcloth_image_id - 服装图片IDresult_image_id - 生成结果图片IDprompt - 主要处理提示词generated_text - AI生成的文案内容text_style - 文案风格(正式/轻松/创意等)face_prompt - 人脸识别提示词cloth_prompt - 服装识别提示词seed - 随机种子workflow_version - 工作流版本model_version - AI模型版本status - 处理状态(pending/processing/completed/failed)progress - 处理进度(0-100)processing_time - 处理耗时(秒)gpu_usage - GPU使用率memory_usage - 内存使用量(MB)id - 配置IDconfig_key - 配置键config_value - 配置值config_type - 配置类型is_public - 是否公开from backend.modules.database import DatabaseConnection
# SQLite连接
db_conn = DatabaseConnection(
db_type="sqlite",
database="backend/data/ai_swap.db"
)
# MySQL连接
db_conn = DatabaseConnection(
db_type="mysql",
host="localhost",
port=3306,
database="ai_swap",
username="root",
password="password"
)
# 测试连接
if db_conn.test_connection():
print("连接成功")
# 创建用户
user = db_ops.create_user("username", "email@example.com")
# 查询用户
user = db_ops.get_user_by_username("username")
user = db_ops.get_user_by_api_key("api_key")
# 更新用户
db_ops.update_user(user.id, is_active=False)
# 删除用户
db_ops.delete_user(user.id)
# 创建图片记录
image = db_ops.create_image_record(
user_id=user.id,
image_type="face",
original_filename="face.jpg",
stored_path="/path/to/image.jpg"
)
# 查询用户图片
images = db_ops.get_user_images(user.id, image_type="face")
# 更新图片记录
db_ops.update_image_record(image.id, file_size=1024000)
# 删除图片记录(软删除)
db_ops.delete_image_record(image.id, soft_delete=True)
# 创建AI换脸处理记录
process = db_ops.create_process_record(
user_id=user.id,
face_image_id=face_image.id,
cloth_image_id=cloth_image.id,
prompt="时尚模特在巴黎街头",
face_prompt="保持面部特征清晰",
cloth_prompt="时尚服装风格",
seed=42,
workflow_version="2.0.0",
model_version="stable-diffusion-xl"
)
# 保存结果图片和生成的文案
db_ops.save_result_image(
process_id=process.id,
result_image_id=result_image.id,
generated_text="时尚模特在巴黎街头展现优雅气质",
text_style="时尚"
)
# 更新性能指标
db_ops.update_processing_metrics(
process_id=process.id,
processing_time=15.5,
gpu_usage=85.2,
memory_usage=2048.0
)
# 获取用户AI换脸历史
history = db_ops.get_user_ai_swap_history(user.id, page=1, page_size=20)
# 获取成功的换脸记录
successful_swaps = db_ops.get_successful_swaps(user.id, limit=10)
# 搜索特定提示词的处理记录
search_results = db_ops.search_processes_by_prompt("海边", user.id)
# 设置配置
db_ops.set_config(
"max_image_size",
10485760,
config_type="int",
description="最大图片文件大小"
)
# 获取配置值
max_size = db_ops.get_config_value("max_image_size", default=5242880)
# 获取配置列表
configs = db_ops.list_configs(is_public=True)
from backend.modules.database import DatabaseMigration
migration = DatabaseMigration()
# 创建迁移文件
migration_file = migration.create_migration(
version="1.1.0",
description="添加新字段",
up_sql="ALTER TABLE users ADD COLUMN new_field TEXT;",
down_sql="ALTER TABLE users DROP COLUMN new_field;"
)
# 执行迁移
migration.migrate_up()
# 回滚迁移
migration.migrate_down("1.0.0")
# 检查数据库健康状态
health = migration.check_database_health()
from backend.modules.database import DatabaseOperations
db_ops = DatabaseOperations()
# 1. 创建用户
user = db_ops.create_user("ai_user", "ai@example.com")
# 2. 上传人脸图片
face_image = db_ops.create_image_record(
user_id=user.id,
image_type="face",
original_filename="face.jpg",
stored_path="/data/images/face_001.jpg"
)
# 3. 上传服装图片
cloth_image = db_ops.create_image_record(
user_id=user.id,
image_type="cloth",
original_filename="cloth.jpg",
stored_path="/data/images/cloth_001.jpg"
)
# 4. 创建处理记录
process = db_ops.create_process_record(
user_id=user.id,
face_image_id=face_image.id,
cloth_image_id=cloth_image.id,
prompt="美女站在海边",
workflow_version="1.0.0",
model_version="stable-diffusion-v1.5"
)
# 5. 处理完成后保存结果
result_image = db_ops.create_image_record(
user_id=user.id,
image_type="result",
original_filename="result.jpg",
stored_path="/data/images/result_001.jpg"
)
db_ops.save_result_image(
process_id=process.id,
result_image_id=result_image.id,
generated_text="美丽的海边风景,阳光明媚",
text_style="轻松"
)
# 更新处理性能指标
db_ops.update_processing_metrics(
process_id=process.id,
processing_time=12.5,
gpu_usage=85.2,
memory_usage=2048.0
)
# 获取用户AI换脸历史
history = db_ops.get_user_ai_swap_history(user.id, page=1, page_size=20)
# 获取成功的换脸记录
successful_swaps = db_ops.get_successful_swaps(user.id, limit=10)
# 搜索特定提示词
search_results = db_ops.search_processes_by_prompt("海边", user.id)
# 获取系统统计信息
stats = db_ops.get_statistics()
print(f"总用户数: {stats['total_users']}")
print(f"人脸图片数: {stats['face_images']}")
print(f"服装图片数: {stats['cloth_images']}")
print(f"结果图片数: {stats['result_images']}")
print(f"完成率: {stats['completion_rate']:.2f}%")
print(f"平均处理时间: {stats['avg_processing_time']}秒")
# 分页获取用户列表
result = db_ops.list_users(page=1, page_size=20, is_active=True)
print(f"用户列表: {result['users']}")
print(f"总页数: {result['total_pages']}")
# 使用上下文管理器自动管理事务
with db_connection.get_session() as session:
# 执行数据库操作
session.add(new_record)
# 自动提交或回滚
默认使用SQLite数据库,文件位置:backend/data/ai_swap.db
如需使用MySQL,请修改连接参数:
db_conn = DatabaseConnection(
db_type="mysql",
host="localhost",
port=3306,
database="ai_swap",
username="your_username",
password="your_password"
)
pool_size: 连接池大小(默认10)max_overflow: 最大溢出连接数(默认20)pool_recycle: 连接回收时间(MySQL默认3600秒)所有数据库操作都包含完整的错误处理:
try:
user = db_ops.create_user("username", "email")
except Exception as e:
logger.error(f"创建用户失败: {e}")
# 处理错误
运行示例代码测试数据库功能:
cd backend/modules/database
python example_usage.py
A: 修改DatabaseConnection的db_type参数,SQLite为"sqlite",MySQL为"mysql"
A: 使用DatabaseMigration类创建和执行迁移文件
A: SQLite直接复制数据库文件,MySQL使用mysqldump命令
A: 确保查询条件使用索引字段,使用分页查询避免大量数据加载