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.

62 lines
2.5 KiB

"""
股票数据模型
"""
from datetime import datetime, date
from sqlalchemy import Column, Integer, String, BigInteger, Numeric, Boolean, Date, DateTime
from app.db.base import Base
class StockInfo(Base):
"""股票基础信息表"""
__tablename__ = "stock_info"
id = Column(Integer, primary_key=True, index=True)
code = Column(String(20), unique=True, nullable=False, index=True)
symbol = Column(String(100), nullable=False)
security_status = Column(Integer)
pre_close = Column(Numeric(12, 4))
high_limited = Column(Numeric(12, 4))
low_limited = Column(Numeric(12, 4))
price_tick = Column(Numeric(10, 4))
exchange = Column(String(10)) # SH, SZ, BJ
industry = Column(String(50))
list_date = Column(Date)
is_active = Column(Boolean, default=True)
created_at = Column(DateTime(timezone=True), default=datetime.utcnow)
updated_at = Column(DateTime(timezone=True), default=datetime.utcnow, onupdate=datetime.utcnow)
class StockKlineDaily(Base):
"""股票日线数据表"""
__tablename__ = "stock_kline_daily"
id = Column(BigInteger, primary_key=True, index=True)
code = Column(String(20), nullable=False, index=True)
trade_date = Column(Date, nullable=False, index=True)
open = Column(Numeric(12, 4), nullable=False)
high = Column(Numeric(12, 4), nullable=False)
low = Column(Numeric(12, 4), nullable=False)
close = Column(Numeric(12, 4), nullable=False)
volume = Column(BigInteger, nullable=False)
amount = Column(Numeric(18, 4), nullable=False)
adj_factor = Column(Numeric(12, 6))
created_at = Column(DateTime(timezone=True), default=datetime.utcnow)
updated_at = Column(DateTime(timezone=True), default=datetime.utcnow, onupdate=datetime.utcnow)
class StockKlineMin(Base):
"""股票分钟数据表"""
__tablename__ = "stock_kline_min"
id = Column(BigInteger, primary_key=True, index=True)
code = Column(String(20), nullable=False, index=True)
period_type = Column(String(10), nullable=False) # min1, min5, min15, min30, min60
trade_datetime = Column(DateTime, nullable=False, index=True)
open = Column(Numeric(12, 4), nullable=False)
high = Column(Numeric(12, 4), nullable=False)
low = Column(Numeric(12, 4), nullable=False)
close = Column(Numeric(12, 4), nullable=False)
volume = Column(BigInteger, nullable=False)
amount = Column(Numeric(18, 4), nullable=False)
created_at = Column(DateTime(timezone=True), default=datetime.utcnow)