55 lines
1.6 KiB
Python
55 lines
1.6 KiB
Python
"""
|
|
StarSystem ORM Model
|
|
恒星系统数据模型
|
|
"""
|
|
from sqlalchemy import Column, Integer, String, Text, Double, TIMESTAMP, func
|
|
from sqlalchemy.dialects.postgresql import JSONB
|
|
from sqlalchemy.orm import relationship
|
|
from app.database import Base
|
|
|
|
|
|
class StarSystem(Base):
|
|
"""恒星系统表"""
|
|
__tablename__ = 'star_systems'
|
|
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
name = Column(String(200), unique=True, nullable=False, index=True)
|
|
name_zh = Column(String(200))
|
|
host_star_name = Column(String(200), nullable=False, index=True)
|
|
|
|
# 位置信息(系外恒星系)
|
|
distance_pc = Column(Double)
|
|
distance_ly = Column(Double)
|
|
ra = Column(Double)
|
|
dec = Column(Double)
|
|
position_x = Column(Double)
|
|
position_y = Column(Double)
|
|
position_z = Column(Double)
|
|
|
|
# 恒星物理参数
|
|
spectral_type = Column(String(20))
|
|
radius_solar = Column(Double)
|
|
mass_solar = Column(Double)
|
|
temperature_k = Column(Double)
|
|
magnitude = Column(Double)
|
|
luminosity_solar = Column(Double)
|
|
|
|
# 显示属性
|
|
color = Column(String(20))
|
|
planet_count = Column(Integer, default=0)
|
|
|
|
# 描述信息
|
|
description = Column(Text)
|
|
details = Column(Text)
|
|
extra_data = Column(JSONB)
|
|
|
|
# 时间戳
|
|
created_at = Column(TIMESTAMP, server_default=func.now())
|
|
updated_at = Column(TIMESTAMP, server_default=func.now(), onupdate=func.now())
|
|
|
|
# 关系
|
|
celestial_bodies = relationship("CelestialBody", back_populates="star_system", cascade="all, delete-orphan")
|
|
|
|
def __repr__(self):
|
|
return f"<StarSystem(id={self.id}, name='{self.name}', planet_count={self.planet_count})>"
|