Fundamental_Analysis/backend/DATABASE_SETUP.md

4.3 KiB
Raw Blame History

数据库设置指南

概述

本项目使用PostgreSQL作为主数据库SQLAlchemy作为ORMAlembic作为数据库迁移工具。

数据库架构

表结构

  1. reports - 报告主表

    • 存储股票分析报告的基本信息
    • 包含证券代码、市场、状态等字段
  2. analysis_modules - 分析模块表

    • 存储报告中各个分析模块的内容
    • 与reports表一对多关系
  3. progress_tracking - 进度追踪表

    • 记录报告生成过程中各步骤的执行状态
    • 与reports表一对多关系
  4. system_config - 系统配置表

    • 存储系统配置信息
    • 使用JSONB格式存储配置值

环境配置

1. 安装PostgreSQL

# macOS (使用Homebrew)
brew install postgresql
brew services start postgresql

# Ubuntu/Debian
sudo apt-get install postgresql postgresql-contrib

# CentOS/RHEL
sudo yum install postgresql-server postgresql-contrib

2. 创建数据库

-- 连接到PostgreSQL
psql -U postgres

-- 创建数据库
CREATE DATABASE stock_analysis;

-- 创建用户(可选)
CREATE USER stock_user WITH PASSWORD 'your_password';
GRANT ALL PRIVILEGES ON DATABASE stock_analysis TO stock_user;

3. 配置环境变量

创建 .env 文件:

# 数据库配置
DATABASE_URL=postgresql+asyncpg://username:password@localhost:5432/stock_analysis
DATABASE_ECHO=false

# API配置
GEMINI_API_KEY=your_gemini_api_key
TUSHARE_TOKEN=your_tushare_token

数据库管理

使用管理脚本

# 检查数据库连接
python manage_db.py check

# 初始化数据库表
python manage_db.py init

# 查看数据库状态
python manage_db.py status

使用Alembic迁移

# 初始化Alembic已完成
alembic init alembic

# 创建迁移文件
alembic revision --autogenerate -m "描述信息"

# 应用迁移
alembic upgrade head

# 查看迁移历史
alembic history

# 回滚迁移
alembic downgrade -1

开发工具

1. 数据库连接检查

python check_db.py

2. 数据库初始化

python init_db.py

3. 综合管理工具

python manage_db.py [check|init|status]

模型使用示例

创建报告

from app.models import Report, AnalysisModule
from app.core.database import get_db

async def create_report():
    async for db in get_db():
        # 创建报告
        report = Report(
            symbol="000001",
            market="中国",
            status="generating"
        )
        db.add(report)
        await db.commit()
        await db.refresh(report)
        
        # 创建分析模块
        module = AnalysisModule(
            report_id=report.id,
            module_type="financial_data",
            module_order=1,
            title="财务数据分析",
            status="pending"
        )
        db.add(module)
        await db.commit()

查询报告

from sqlalchemy import select
from app.models import Report

async def get_report(symbol: str, market: str):
    async for db in get_db():
        stmt = select(Report).where(
            Report.symbol == symbol,
            Report.market == market
        )
        result = await db.execute(stmt)
        return result.scalar_one_or_none()

性能优化

索引

所有表都已配置适当的索引:

  • reports: symbol+market, status, created_at
  • analysis_modules: report_id, module_type, status, module_order
  • progress_tracking: report_id, status, step_order
  • system_config: config_key, updated_at

连接池

数据库连接使用异步连接池,配置参数:

  • pool_size: 10
  • max_overflow: 20
  • pool_timeout: 30秒
  • pool_recycle: 1小时

故障排除

常见问题

  1. 连接失败

    • 检查PostgreSQL服务是否运行
    • 验证数据库URL配置
    • 确认防火墙设置
  2. 迁移失败

    • 检查数据库权限
    • 验证表结构冲突
    • 查看Alembic日志
  3. 性能问题

    • 检查索引使用情况
    • 分析慢查询日志
    • 优化查询语句

日志配置

config.py 中设置 DATABASE_ECHO=True 可以查看SQL执行日志。

备份与恢复

备份

pg_dump -U username -h localhost stock_analysis > backup.sql

恢复

psql -U username -h localhost stock_analysis < backup.sql