85 lines
2.9 KiB
Python
85 lines
2.9 KiB
Python
"""数据库表定义"""
|
|
|
|
from sqlalchemy import (
|
|
MetaData, Table, Column, Integer, Float, Text, Boolean, DateTime,
|
|
func
|
|
)
|
|
|
|
metadata = MetaData()
|
|
|
|
recommendations_table = Table(
|
|
"recommendations", metadata,
|
|
Column("id", Integer, primary_key=True, autoincrement=True),
|
|
Column("ts_code", Text, nullable=False),
|
|
Column("name", Text, nullable=False),
|
|
Column("sector", Text),
|
|
Column("score", Float),
|
|
Column("market_temp_score", Float),
|
|
Column("sector_score", Float),
|
|
Column("capital_score", Float),
|
|
Column("technical_score", Float),
|
|
Column("position_score", Float),
|
|
Column("valuation_score", Float),
|
|
Column("signal", Text),
|
|
Column("entry_price", Float),
|
|
Column("target_price", Float),
|
|
Column("stop_loss", Float),
|
|
Column("reasons", Text),
|
|
Column("llm_analysis", Text, default=""),
|
|
Column("strategy", Text, default="momentum"),
|
|
Column("llm_score", Float, default=None),
|
|
Column("scan_session", Text),
|
|
Column("created_at", DateTime, server_default=func.now()),
|
|
)
|
|
|
|
sector_heat_table = Table(
|
|
"sector_heat", metadata,
|
|
Column("id", Integer, primary_key=True, autoincrement=True),
|
|
Column("sector_code", Text, nullable=False),
|
|
Column("sector_name", Text, nullable=False),
|
|
Column("pct_change", Float),
|
|
Column("capital_inflow", Float),
|
|
Column("limit_up_count", Integer),
|
|
Column("heat_score", Float),
|
|
Column("trade_date", Text, nullable=False),
|
|
Column("created_at", DateTime, server_default=func.now()),
|
|
)
|
|
|
|
market_temperature_table = Table(
|
|
"market_temperature", metadata,
|
|
Column("id", Integer, primary_key=True, autoincrement=True),
|
|
Column("trade_date", Text, nullable=False, unique=True),
|
|
Column("up_count", Integer),
|
|
Column("down_count", Integer),
|
|
Column("limit_up_count", Integer),
|
|
Column("limit_down_count", Integer),
|
|
Column("max_streak", Integer),
|
|
Column("broken_rate", Float),
|
|
Column("temperature", Float),
|
|
Column("created_at", DateTime, server_default=func.now()),
|
|
)
|
|
|
|
recommendation_tracking_table = Table(
|
|
"recommendation_tracking", metadata,
|
|
Column("id", Integer, primary_key=True, autoincrement=True),
|
|
Column("recommendation_id", Integer),
|
|
Column("track_date", Text, nullable=False),
|
|
Column("current_price", Float),
|
|
Column("pct_from_entry", Float),
|
|
Column("hit_target", Boolean, default=False),
|
|
Column("hit_stop_loss", Boolean, default=False),
|
|
Column("status", Text, default="active"),
|
|
Column("created_at", DateTime, server_default=func.now()),
|
|
)
|
|
|
|
users_table = Table(
|
|
"users", metadata,
|
|
Column("id", Integer, primary_key=True, autoincrement=True),
|
|
Column("username", Text, nullable=False, unique=True),
|
|
Column("password_hash", Text, nullable=False),
|
|
Column("role", Text, default="user"),
|
|
Column("is_active", Boolean, default=True),
|
|
Column("created_at", DateTime, server_default=func.now()),
|
|
Column("updated_at", DateTime, server_default=func.now()),
|
|
)
|